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

  • 相关阅读:
    课后作业 学号15100457
    开学第一课
    20180320作业2:进行代码复审训练
    20180320作业1:源代码管理工具调查
    软工作业PSP与单元测试训练
    构建之法 完成教材第一章P18第4题
    第一天上课 创建博客
    进行代码复审训练
    源代码管理工具调查
    软工作业PSP与单元测试训练
  • 原文地址:https://www.cnblogs.com/kingBook/p/12870706.html
Copyright © 2011-2022 走看看