• unity脚本运行顺序具体的解释


    unity脚本自带函数执行顺序例如以下:将以下脚本挂在随意物体执行就可以得到

      Awake ->OnEable-> Start ->-> FixedUpdate-> Update  -> LateUpdate ->OnGUI ->Reset -> OnDisable ->OnDestroy

    using UnityEngine;
    using System.Collections;
    
    public class timetest : MonoBehaviour {
    	
    	 void LateUpdate()
        {
            print("LateUpdate");
        }
    
        void OnGUI()
        {
            print("OnGUI");
        }
    
        void Awake()
        {
            print("Awake");
        }
    
        void OnEnable()
        {
            print("OnEnable");
        }
    
        void Start()
        {
            print("Start");
        }
    	 void Update()
        {
            print("Update");
        }
    	void FixedUpdate()
        {
            print("FixedUpdate");
        }
       
    	void Reset()
    	{
    		 print("OnReset");
    	}
       
    
        void OnDestroy()
        {
            print("OnDestroy");
        }
    
        void OnDisable()
        {
            print("OnDisable");
        }
    }
    
    
    打印结果例如以下


      以下我们针对每个方法进行具体的说明(摘自http://www.unitymanual.com/thread-14461-1-1.html):

      1.Awake:用于在游戏開始之前初始化变量或游戏状态。在脚本整个生命周期内它仅被调用一次.Awake在全部对象被初始化之后调用。所以你能够安全的与其它对象对话或用诸如GameObject.FindWithTag()这种函数搜索它们。每一个游戏物体上的Awake以随机的顺序被调用。

    因此。你应该用Awake来设置脚本间的引用。并用Start来传递信息Awake总是在Start之前被调用。它不能用来运行协同程序。



      2.Start:仅在Update函数第一次被调用前调用。Start在behaviour的生命周期中仅仅被调用一次。

    它和Awake的不同是Start仅仅在脚本实例被启用时调用。

    你能够按需调整延迟初始化代码。Awake总是在Start之前运行。这同意你协调初始化顺序。在全部脚本实例中。Start函数总是在Awake函数之后调用。
      3.FixedUpdate:固定帧更新。在Unity导航菜单条中。点击“Edit”-->“Project Setting”-->“Time”菜单项后,右側的Inspector视图将弹出时间管理器,当中“Fixed Timestep”选项用于设置FixedUpdate()的更新频率,更新频率默觉得0.02s。
    4.Update:正常帧更新,用于更新逻辑。每一帧都运行,处理Rigidbody时。须要用FixedUpdate取代Update。比如:给刚体加一个作用力时,你必须应用作用力在FixedUpdate里的固定帧,而不是Update中的帧。(两者帧长不同)FixedUpdate,每固定帧绘制时运行一次。和update不同的是FixedUpdate是渲染帧运行,假设你的渲染效率低下的时候FixedUpdate调用次数就会跟着下降。

    FixedUpdate比較适用于物理引擎的计算,由于是跟每帧渲染有关。

    Update就比較适合做控制。
      5.LateUpdate:在全部Update函数调用后被调用,和fixedupdate一样都是每一帧都被调用运行,这可用于调整脚本运行顺序。比如:当物体在Update里移动时,尾随物体的相机能够在LateUpdate里实现。LateUpdate,在每帧Update运行完成调用。他是在全部update结束后才调用,比較适合用于命令脚本的运行。官网上样例是摄像机的尾随,都是在全部update操作完才跟进摄像机。不然就有可能出现摄像机已经推进了,可是视角里还未有角色的空帧出现。

      6.OnGUI:在渲染和处理GUI事件时调用。

    比方:你画一个button或label时经常常使用到它。

    这意味着OnGUI也是每帧运行一次。

      7.Reset:在用户点击检视面板的Resetbutton或者首次加入该组件时被调用。此函数仅仅在编辑模式下被调用。

    Reset最经常使用于在检视面板中给定一个默认值。

      8.OnDisable:当物体被销毁时 OnDisable将被调用,而且可用于随意清理代码。脚本被卸载时,OnDisable将被调用,OnEnable在脚本被加载后调用。注意: OnDisable不能用于协同程序。



      9.OnDestroy:当MonoBehaviour将被销毁时,这个函数被调用。OnDestroy仅仅会在预先已经被激活的游戏物体上被调用。注意:OnDestroy也不能用于协同程序。

      备注:

      协同程序,即在主程序执行时同一时候开启还有一段逻辑处理,来协同当前程序的执行。换句话说,开启协同程序就是开启一个线程。在Unity3d中。使用MonoBehaviour.StartCoroutine方法就可以开启一个协同程序,也就是说该方法必须在MonoBehaviour或继承于MonoBehaviour的类中调用。
            游戏蛮牛:http://www.unitymanual.com

    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    WIN32程序挂钩SetLastError,输出错误描述到控制台
    设置c#windows服务描述及允许服务与桌面交互的几种方法(作者博客还有一大堆C#创建服务的文章)
    VC内存溢出一例 –- 调用约定不一致 (_CRT_DEBUGGER_HOOK(_CRT_DEBUGGER_GSFAILURE)
    QtWaitingSpinner
    美国独立战争真相:英法全球争霸战之北美战场
    asp.net的ajax以及json
    HashTable和HashSet中的类型陷阱
    C语言的一些常见细节
    堆排序详解
    Core Animation编程指南
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/4891328.html
Copyright © 2020-2023  润新知