脚本:.cs的文本文件 类文件,能附加到游戏物体上,定义游戏对象行为指令的代码
C#脚本再被添加到物体上后,会自动创建一个对象,物体上的Transform、音频一类组件都是某一类的对象,而游戏物体是GameObject类的对象。
当使用物体的组件时,使用的是物体组件的引用
当脚本中与Unity中,某个变量的值不一致时,通过方法访问到这个变量的值,结果为Unity中设置的,因为方法访问的是对象,而Unity创建和访问的就是这个类的对象。这里的脚本中的值,应该指的是初始化,脚本中的变量值,用于初始值的设置
特性
可以在变量声明的上方加上
- [SerializeField] 即序列化字段,来使private的变量可以在编辑器中显示(private的变量,无法在Unity中被看到)
- [HideInInspector] 可以在编译器中隐藏字段,比如public变量
- [Range(min, max)] 可以限制编辑器中,这个变量的取值范围,使用后Inspector中的该变量会变成滑动数轴的形式
C#类与脚本之区别
C#类:字段、属性、构造函数、方法
脚本: 字段、方法
属性在编译器中不能显示,通常在脚本中不写。而脚本在附加到游戏物体上时自动创建对象,所以构造函数也不需要。
这里的脚本并不包括,GameCore之类的游戏核心和逻辑文件。
脚本生命周期
Unity脚本从唤醒到被销毁的过程
消息、必然事件:满足某种条件的Unity引擎自动调用的函数
初始阶段 Awake唤醒- 当物体载入时,立即调用一次
- 常用于在游戏开始前进行初始化
-
脚本被禁用时依然可以执行
- 可以判断当满足某种条件执行此脚本 this.enable = ture
- 程序开始时,会首先执行所有物体的Awake,然后是 Start
每当脚本对象启用时调用
Start开始- 物体载入且脚本对象启用时被调用一次
- 脚本被禁用时不能执行
- 常用于数据或游戏逻辑初始化
- 执行时机晚于Awake
FixedUpdata固定更新
执行时机:脚本启用后,固定时间被调用,默认为0.02s
适用性:适用于对游戏对象做物理操作(移动,旋转),不会受到渲染影响
OnCollisionXXX 碰撞
当满足碰撞条件时调用
OnTriggerXXX 触发当满足触发条件时调用
输入事件 OnMouseEnter 鼠标移入 OnMouseOver 鼠标经过 OnMouseExit 鼠标离开 OnMouseDown 鼠标按下 OnMouseUp 鼠标抬起 游戏逻辑Updata
执行时机:渲染帧执行,执行间隔不固定(渲染时间不固定,因为每帧渲染量不同且不同设备机能有差异
适用性:处理游戏逻辑,有时为了代码简单,会将移动也放入此处,成为按帧移动
LataUpate 延迟更新
执行时机:处理游戏逻辑,与Updata在同一帧执行,但是一定在 updata被调用之后执行
适用性:适用于跟随逻辑 ,比如第三人称游戏的摄像机
场景渲染 OnBecameVisible 当可见当Mesh Renderer 在任何相机上可见时调用
OnBecameInvisible 当不可见 结束阶段 OnDisable 当不可用对象变为不可用或附属游戏对象非激活状态时次函数被调用
OnDestroy 当销毁当脚本销毁或所附属的游戏对象被销毁时调用
OnApplicationQuit 当程序结束应用程序退出时被调用
调试
-
vs调试:适合逻辑复杂的问题的调试,
右键----快速监视和即时窗口: 适合Start,Awake
单帧调试:适合FixedUpdate,在vs启动调试,然后在unity运行场景、到想要调试的位置后暂停游戏,加断点,打开单帧执行,结束
注意事项
- 在未对Unity内部文件进行修改的情况下,开始自动创建的 Start 和 Updata方法在用不到时,记得删掉!
- 如果想要一劳永逸,则应当对Unity根目录版本号EditorDataResourcesScriptTemplates,下的 81-C# Script-NewBehaviourScript.cs.txt 进行修改(打开方式用VS),修改为自己需要的样子
- 每个类和方法之类的应该在其开头上写上///,介绍下这个类或方法



