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

  • 相关阅读:
    P4097 [HEOI2013]Segment 李超线段树
    P3592 [POI2015]MYJ
    P3698 [CQOI2017]小Q的棋盘
    P4098 [HEOI2013]ALO 可持久化01Trie
    P2331 [SCOI2005]最大子矩阵
    P4099 [HEOI2013]SAO
    loj #6032. 「雅礼集训 2017 Day2」水箱 线段树优化DP转移
    CF765F Souvenirs 离线+线段树+主席树
    CF1097D Makoto and a Blackboard
    loj #6570. 毛毛虫计数
  • 原文地址:https://www.cnblogs.com/kingBook/p/12870706.html
Copyright © 2011-2022 走看看