unity中OnEnable()和OnDisable()

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Fenglele_Fans/article/details/82178591

这里做一个关于OnEnable()和OnDisable()个测试。在场景中cube上挂一个脚本TestOne.cs,然后在另一物体上挂脚本TestTwo.cs;

TestOne如下:

public class TestOne : MonoBehaviour {

    private void OnEnable() 
    {
        print("激活");
    }
    private void OnDisable() 
    {
        print("禁止");
    }
}```

TestTwo.cs如下:

void Update ()
    {
        //MouseRotate2();
        MouseRotate();
        testActive();
    }
    private void OnEnable() //只在程序启动时执行一次,因为TestTwo脚本并没有挂在cube上
    {
        print("启用");
    }
    private void OnDisable() //只在程序停止时执行一次,因为TestTwo脚本并没有挂在cube上
    {
        print("禁调");
    }
    void testActive()
    {
        if(Input.GetKeyDown(KeyCode.A))
        {
            // cube.gameObject.SetActive(false);//游戏对象.setActive(false)会激发游戏对象上挂的脚本中的OnDisable()方法(前提是该游戏对象的状态由true到false发生转变);
            // cube.GetComponent<MeshRenderer>().enabled = false; //这种情况下onEnable和onDisable不会被调用的(enable()方法只是控制对象在屏幕上是否渲染出现,碰撞还是可以检测到的哦);
            Destroy(cube.gameObject); //destroy游戏对象会激发游戏对象上挂的脚本中的OnDisable()方法;
        }
        if(Input.GetKeyDown(KeyCode.B))
        {
            //cube.gameObject.SetActive(true);//游戏对象.setActive(true)会激发游戏对象上挂的脚本中的OnEnable()方法(前提是该游戏对象的状态由false到true发生转变);
            // cube.GetComponent<MeshRenderer>().enabled = true;
            Object cc =Resources.Load("Cube");//重新创造该游戏对象也会激发对象上挂脚本中的OnEnable()方法;
            GameObject vv = (GameObject) Instantiate(cc, Vector3.zero, Quaternion.identity);
        }
    }

猜你喜欢

转载自blog.csdn.net/Fenglele_Fans/article/details/82178591