unity 激活一个GameObject时,容易忽略的问题

Posted kingBook

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity 激活一个GameObject时,容易忽略的问题相关的知识,希望对你有一定的参考价值。

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();
         */
         
    }
}

以上是关于unity 激活一个GameObject时,容易忽略的问题的主要内容,如果未能解决你的问题,请参考以下文章

unity基础(GameObject transform)

Unity3D中使用GameObject.Find()应该注意的问题

Unity update里物体每次被激活时,执行一次代码

Unity Gameobject Transform

Unity菜单栏

U3D GameObject 解读