Unity 3 D基礎知識(一)MonoBehaviourスクリプト内蔵関数実行順序テスト
2906 ワード
質問:Unity 3 Dプロジェクトでは、初期化コードをAwake()、Start()、OnEnable()関数に書くべきか分からないことがよくあります。
テスト:直接コード
using UnityEngine;
public class test_MonoBehaviour : MonoBehaviour
{
public static string pressKey = string.Empty;
void Awake()
{
Debug.Log("-----Awake-----" + pressKey);
}
void Start()
{
Debug.Log("-----Start-----" + pressKey);
}
void OnEnable()
{
Debug.Log("-----OnEnable-----" + pressKey);
}
void OnDisable()
{
Debug.Log("-----OnDisable-----" + pressKey);
}
void OnDestroy()
{
Debug.Log("-----OnDestroy-----" + pressKey);
}
}
using UnityEngine;
public class test_MonoBehaviourCtrl : MonoBehaviour
{
GameObject testDestroyObj;
void Update()
{
if (Input.GetKeyUp(KeyCode.A))
{
test_MonoBehaviour.pressKey = "A";
/// ///
testDestroyObj = new GameObject("testDestroyObj");
testDestroyObj.AddComponent();
Debug.Log("-----AddComponent-----" + testDestroyObj);
}
else if (Input.GetKeyUp(KeyCode.S))
{
test_MonoBehaviour.pressKey = "S";
///Destroy ///
Destroy(testDestroyObj);
Debug.Log("-----Destroy-----" + testDestroyObj);
}
else if (Input.GetKeyUp(KeyCode.D))
{
test_MonoBehaviour.pressKey = "D";
///DestroyImmediate ///
DestroyImmediate(testDestroyObj);
Debug.Log("-----DestroyImmediate-----" + testDestroyObj);
}
}
}
最初に「A」を押すと出力:-----Awake-----A
-----OnEnable-----A
-----AddComponent-----testDestroyObj (UnityEngine.GameObject)
-----Start-----A
「S」を押すと出力:
-----OnDisable-----S
-----Destroy-----testDestroyObj (UnityEngine.GameObject)
-----OnDestroy-----S
2回目に「A」を押すと出力:
-----Awake-----A
-----OnEnable-----A
-----AddComponent-----testDestroyObj (UnityEngine.GameObject)
-----Start-----A
「D」を押すと出力:
-----OnDisable-----D
-----OnDestroy-----D
-----DestroyImmediate-----null