初学 Unity | 青训营笔记

163 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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指当前组件)
    
  • 其他游戏物体
    1. 引用游戏物体:

      public GameObject 游戏物体名;
      
    2. 不引用游戏物体

      (1) 通过名称查找

      GameObject 返回对象名obj = GameObject.Find("游戏物体名")
      

      (2) 通过标签查找

      GameObject 返回对象名obj = GameObject.FindGameObjectWithTag("标签名")
      

      (3) 通过类型查找

      游戏类型 返回对象名obj = GameObject.FindObjectOfType<游戏类型>() 
      

      (4) 多个物体的查找与获取

      // 1. 通过标签查找
      GameObject[] 数组名 = GameObject.FindGameObjectsWithTag("标签名")
      // 2. 通过类型查找
      GameObject[] 数组名 = GameObject.FindObjectsOfType()
      
    3. 注意:游戏物体必须处于激活状态才能查找到

游戏物体的方法与其他成员变量

  • 游戏物体的激活与失活
    1. 激活与失活游戏物体:游戏对象.SetActive(true/false);
    2. 获取游戏物体的激活与失活状态:游戏对象.activeInHierarchy();
  • 游戏物体标签:游戏对象.tag
  • 游戏物体层级:游戏对象.layer