zoukankan      html  css  js  c++  java
  • unity 使用GameObject.SetActive(true)激活对象时,会在SetActive内部调用Awake和OnEnable函数

    using System;
    using UnityEngine;
    public class Foo:MonoBehaviour{
        private void Awake(){
            Debug.Log("Foo.Awake();");
        }
        private void OnEnable(){
            Debug.Log("Foo.OnEnable();");
        }
    
        private void Start(){
            Debug.Log("Foo.Start();");
        }
    }
    
    using System;
    using UnityEngine;
    
    public class Test:MonoBehaviour{
        
        public GameObject foo2;//Hierarchy面板中绑定Foo脚本的GameObject(未激活、在绑定Test脚本的GameObject上方)
        
        private void Start(){
            //Test1();
            Test2();
        }
        
        private void Test1(){
            GameObject fooGameObject=new GameObject("Foo",typeof(Foo));
            //创建GameObject后即使立刻SetActive(false),绑定代码中的Awake与OnEnable函数也会触发
            fooGameObject.SetActive(false);
            /*output:
            Foo.Awake();
            Foo.OnEnable();
            */
            
            Debug.Log("fooGameObject.SetActive(true); Start");
            fooGameObject.SetActive(true);
            Debug.Log("fooGameObject.SetActive(true); End");
            //在SetActive(true)函数内调用OnEnable函数
            /*output:
            fooGameObject.SetActive(true); Start
            Foo.OnEnable();
            fooGameObject.SetActive(true); End
            Foo.Start();
            */
        }
        
        private void Test2(){
            Debug.Log("fooGameObject.SetActive(true); Start");
            foo2.SetActive(true);
            Debug.Log("fooGameObject.SetActive(true); End");
            //在SetActive(true)函数内调用Awake与OnEnable函数
            /*output:
             fooGameObject.SetActive(true); Start
             Foo.Awake();
             Foo.OnEnable();
             fooGameObject.SetActive(true); End
             Foo.Start();
             */
             
        }
    }
    
    

    总结:
    当调用GameObject. SetActive(true)方法激活对象时,会在方法内部调用Awake和OnEnable函数,然后才调用Start函数。
    Awake与Start函数不管吊销和激活多少次都只会调用一次。

  • 相关阅读:
    用算法合并数组
    Redis各个数据类型的使用场景
    seesion工作原理
    自删除道指令程序
    uva 1335
    《生活在Linux中》之:使用Bash就是使用Emacs
    手动配置S2SH三大框架报错(三)
    数据和C
    IOS之【地图MapKit】
    我工作这几年(五)-- Android学习4.5月总结(一)
  • 原文地址:https://www.cnblogs.com/kingBook/p/12870706.html
Copyright © 2011-2022 走看看