• 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函数不管吊销和激活多少次都只会调用一次。

  • 相关阅读:
    P2610 [ZJOI2012]旅游
    P2323 [HNOI2006]公路修建问题
    P3629 [APIO2010]巡逻
    ARC059F
    AGC004D Teleporter
    p3203 弹飞绵羊
    bzoj5450 轰炸
    bzoj4313 三维积木
    cf123E Maze
    bzoj4423 [AMPPZ2013]Bytehattan
  • 原文地址:https://www.cnblogs.com/kingBook/p/12870706.html
Copyright © 2020-2023  润新知