返回首页DA系统C#IDE文件同步服务屏保 今天是: 2026-05-05    "立夏"  夏季的第一个节气,表示盛夏时节的正式开始

搜索
热搜: linux 技术
Hi~登录注册
查看: 2331|回复: 0

[原创] 【原创】unity脚本生命周期讲解(附Unity中文圣典)

[复制链接]
发表于 2021-2-21 22:28:52 | 显示全部楼层 |阅读模式

少侠不来段修仙之旅吗~

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
本帖最后由 da11 于 2021-3-3 08:18 编辑

脚本生命周期
· Unity 脚本从唤醒到销毁的过程。
· 消息(别称:必然事件、脚本生命周期):当满足某种条件Unity 引擎自动调用的函数。

参考链接:
http://docs.unity3d.com/Manual/ExecutionOrder.html





 楼主| 发表于 2021-2-23 00:19:30 | 显示全部楼层
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScriptLife : MonoBehaviour
{
    ///<summary>
        ///
        ///</summary>

        /*

        // Start is called before the first frame update
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {

    }

        */

    //脚本:.cs的文本文件(类文件)
    //·可附加到游戏物体中,定义游戏对象行为指令的代码

    /*C#类文件结构:(如不用挂在物体上的C#类文件,需要遵循以下规则)
     * 字段
     * 属性
     * 构造函数
     * 方法
     *
     *
     *Unity-C#脚本cs文件结构(如需要挂在物体上的C#脚本文件,需要遵循以下规则)
     *字段
     *方法
    */

    //序列化字段,作用:在编译器中显示私有变量,其他类无法访问此字段
    [SerializeField]
    private int a=100; //初始值字段,在编译器中默认显示的值是100,但是在编译器中改变后就会保存(因为改变的是对象的值)
    //需要重新挂在物体上才能生效

    //在Unity脚本中,属性在编译器中不能显示,通常脚本中不写
    private int A
    {
        get { return this.a; }
        set { this.a = value; }
    }

    //作用:在编译器中隐藏字段,但其他类可以访问此字段
    [HideInInspector]
    public int b;

    //作用,在编译器中,此字段是范围字段
    [Range(0,100)]
    public int c;

    public float d;

    //不要在脚本中写构造函数!!
    /*
    public ScriptLife()
    {
        Debug.Log("调试:调用构造函数");
        //不能在子线程中访问主线程成员
        //不要在脚本中写构造函数
        //d = Time.time;
    }
     */

    /*以下开始讲解脚本生命周期主要内容---初始阶段
     * · Awake 唤醒:(常用重点)
     *     - 当物体载入时立即调用一次;常用于在游戏开始前进行初始化,可以判断当满足某种条件执行此脚本this.enable=true.
     * · OnEnable 当可用:
     *     - 每当脚本对象启用时调用。
     * · Start 开始:(常用重点)
     *     - 物体载入且脚本对象启用时被调用一次。常用于数据或游戏逻辑初始化,执行时机晚于Awake。
     *     
     * 在Unity里面,永远都是Awake先执行,Start后执行
     */

    //此语句在Unity会报错,因为Random没有System命名空间引用时,是Unity的方法
    //没放在方法内等于是在构造函数调用Unity方法,上面例子:不能在子线程中访问主线程成员
    //所以需要放在方法内,而随机数一般都用于数据初始化阶段,故最好放在Awake或者Start方法内!
    //private int e = Random.Range(1, 101);

    private int e;

    //执行时机:创建游戏对象  --> 立即执行  (早于Start)
    //作用:初始化
    //注意方法名一定是Awake
    private void Awake()
    {
        //Debug.Log("Awake-->" + Time.time+"-->"+this.name);
        //Time.time 这句程序语句开始执行的时间(浮点型float)
        //this.name 返回游戏名称(字符串类型)

        //e = Random.Range(1, 101);
        //Debug.Log(e);
    }

    //执行时机:创建游戏对象  --> 脚本启用时才执行
    //作用:初始化
    //注意方法名一定是Start
    private void Start()
    {
        //Debug.Log("Start-->" + Time.time + "-->" + this.name);
    }

    /*以下开始讲解脚本生命周期主要内容---物理阶段
     * · FixedUpdate 固定更新:(常用重点)
     *     - 脚本启用后,固定时间被调用,适用于对游戏对象做物理操作,例如移动、旋转等(物体运动操作)。
     *     - 设置更新频率:"Edit" --> "Project Setting" --> "Time" --> "Fixed Timestep"值,默认为0.02s!
     * · OnCollisionXXX  碰撞:
     *     - 当满足碰撞条件时调用。
     * · OnTriggXXX  触发:
     *     - 当满足触发条件时调用。

     */

    //执行时机:每隔固定时间执行一次。(时间可以修改)
    //适用性:适合对物体做物理操作(移动、旋转...),因为是固定时间,所以不会受到渲染影响
    //渲染时间不固定(每帧渲染物体量不同、机器性能不同)
    private void FixedUpdate()
    {
        //Debug.Log(Time.time);
    }

    /*以下开始讲解脚本生命周期主要内容---游戏逻辑阶段
* · Update 更新:(常用重点)
       - 脚本启用后,每次渲染场景时调用,频率与设备性能及渲染量有关。
     * - 适合物体移动时的代码
   · LateUpdate 延迟更新:
       - 在Update函数被调用后执行,适用于跟随逻辑。(在Update同一帧工作,但是是先执行Update,Update执行完毕在执行LateUpdate)
     * - 适合相机跟随物体的代码
*/

    //执行时机:每一次渲染帧执行一次,执行间隔不固定
    //适用性:处理游戏逻辑
    private void Update()
    {

    }

    /*以下开始讲解脚本生命周期主要内容---输入事件
     * · OnMouseEnter 鼠标移入:
     *     - 鼠标移入到当前Collider时调用。
     * · OnMouseOver 鼠标经过:
     *     - 鼠标经过当前Collider时调用。
     * · OnMouseExit 鼠标离开:
     *     - 鼠标离开当前Collider时调用。
     * · OnMouseDown 鼠标按下:(常用重点)
     *     - 鼠标按下当前Collider时调用。
     * · OnMouseUp 鼠标抬起:
     *     - 鼠标在当前Collider上抬起时调用。
     *     
     * 注意:挂在物体上必须有启用的物体碰撞器Collider,才会生效以上输入事件
     */

    private void OnMouseDown()
    {
        Debug.Log("OnMouseDown ");
    }

    /*以下开始讲解脚本生命周期主要内容---场景渲染
     * · OnBecameVisible 当可见:
     *     - 当Mesh Renderer 在任何相机上可见时调用。(看见的那一帧就执行一次)
     * · OnBecameInvisible 当不可见:
     *     - 当Mesh Renderer 在任何相机上都不可见时调用。(看不见的那一帧就执行一次)
     */

    /*以下开始讲解脚本生命周期主要内容---结束阶段
     * · OnDisable 当不可用:
     *     - 对象变为不可用或附属游戏对象非激活状态时此函数被调用。
     * · OnDestroy 当销毁
     *     - 当脚本销毁或附属的游戏对象被销毁时被调用。
     * · OnApplicationQuit 当程序结束:
     *     - 应用程序退出时被调用。
     */

}

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-23 00:21:13 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-3-3 08:17:58 | 显示全部楼层
附上unity5中文圣典


在圣典中,通过索引查找“MonoBehaviour”即可找到脚本生命周期的相关内容


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册成为修仙之旅的少年~

x
回复 支持 反对

使用道具 举报

游客
回复
*滑块验证:

DA论坛飞机票来了~
快速回复 返回顶部 返回列表