这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
初学 Unity
打印函数
-
print();注意:使用 print必须让当前类继承自 MonoBehaviour。
public class 类名 : MonoBehaviour{ } -
Debug.log(); -
Debug.LogWarning("这里有个警告"); -
Debug.LogError("这里有个报错");
生命周期函数
zhuanlan.zhihu.com/p/374028750
1.Reset
- 调用情况:在编译器模式下(不运行)调用
- 调用时间:脚本第一次挂载到对象身上或者使用了Reset命令后
- 调用次数:一次
- 作用:初始化所有属性值
2.Awark
- 调用情况
- 在加载场景时初始化包含脚本的激活状态的GameObject
- GameObject从非激活状态转变为激活状态
- 在初始化使用Instantiate创建的GameObject之后
- 调用时间:对象激活(✔)之后
- 调用次数:一次
- 作用:代替构造函数进行初始化,加载UI所需资源(Unity中组件的初始化不使用构造函数)
3.OnEnable
- 调用情况
- 游戏物体被激活
- 脚本组件被激活
- 调用时间及次数:每次游戏物体/脚本被激活后都会调用一次
- 作用:重复赋值,变为初始状态
4.Start
- 调用情况
- 游戏物体被激活
- 脚本组件被激活
- 调用时间及次数:首次游戏物体/脚本被激活后会调用一次
- 作用:在脚本实例激活时在第一帧的Update之前被调用,后于Awake执行,方便控制逻辑的前后调用顺序
- 对变量赋值的顺序:申明变量并赋值>检视面板赋值>Awake>OnEnable>Start>外部赋值(>:早于)
5.FixedUpdate
- 调用情况
- 游戏物体被激活
- 脚本组件被激活
- 调用时间及次数:每个固定帧率调用
- 作用:处理物理计算和更新的相关逻辑,例如处理刚体。在 FixedUpdate 内应用运动计算时,无需将值乘以 Time.deltaTime。
6.Update
- 调用情况
- 游戏物体被激活
- 脚本组件被激活
- 调用时间及次数:每帧调用,每秒调用60次左右,根据当前电脑的性能和状态
- 作用:实时更新数据 ,接受输入数据
7.LateUpdate
- 调用情况
- 游戏物体被激活
- 脚本组件被激活
- 调用时间及次数:在调用所有UpDate函数后调用,每秒调用60次左右
- 作用:安排脚本的执行顺序(比如摄像机跟随,一定是人物先移动了,摄像机才会跟随)
8.OnDisable
- 调用情况
- 游戏物体被禁用
- 脚本组件被禁用
- 游戏物体被销毁
- 调用时间及次数:满足调用情况时即时调用一次
- 作用:对象的状态重置,资源的回收与处理
9.OnApplicationQuit
- 调用情况
- 在程序退出之前的所有的游戏对象都会调用这个函数
- 在编辑器中会在用户终止播放模式时调用
- 在网页视图关闭时调用
- 调用时间及次数:满足调用情况时即时调用一次
- 作用:处理一些游戏退出后的逻辑
10. OnDistroy
- 调用情况
- 场景或游戏结束
- 停止播放模式将终止应用程序
- 如果是网页游戏,在网页视图关闭时调用
- 当前脚本被移除
- 当前脚本挂载到的游戏物体被删除
GameObject游戏物体
创建游戏物体
-
使用构造函数(声明+实例化)创建空的游戏物体
GameObject xxx = new GameObject("游戏对象名"); //用xxx接受对象,在代码内操作其他属性 -
使用现有的预制体创建对象
GameObject.Instantiate(预制体名, 创建对象的父类名) Instantiate(预制体名, 创建对象的父类名) //简写 -
使用API创建基本的游戏物体类型
GameObject.CreatePrimitive (PrimitiveType.xxx); // xxx可以是:Cube正方体;Sphere球体;Capsule胶囊;Cylinder圆柱体;Plane平面,占用内存大;Quad平面,占用内存小
获取和查找游戏物体
- 游戏物体自身
this.gameObject (this指当前组件) - 其他游戏物体
-
引用游戏物体:
public GameObject 游戏物体名; -
不引用游戏物体
(1) 通过名称查找
GameObject 返回对象名obj = GameObject.Find("游戏物体名")(2) 通过标签查找
GameObject 返回对象名obj = GameObject.FindGameObjectWithTag("标签名")(3) 通过类型查找
游戏类型 返回对象名obj = GameObject.FindObjectOfType<游戏类型>()(4) 多个物体的查找与获取
// 1. 通过标签查找 GameObject[] 数组名 = GameObject.FindGameObjectsWithTag("标签名") // 2. 通过类型查找 GameObject[] 数组名 = GameObject.FindObjectsOfType() -
注意:游戏物体必须处于激活状态才能查找到
-
游戏物体的方法与其他成员变量
- 游戏物体的激活与失活
- 激活与失活游戏物体:
游戏对象.SetActive(true/false); - 获取游戏物体的激活与失活状态:
游戏对象.activeInHierarchy();
- 激活与失活游戏物体:
- 游戏物体标签:
游戏对象.tag - 游戏物体层级:
游戏对象.layer