Hatena::ブログ(Diary)

万年素人からGeekへの道 このページをアンテナに追加 RSSフィード Twitter

2014/8/19に移行した→ 万年素人からHackerへの道
 | 

2012-12-27 Thursday

GameObjectのactiveについて確認 Unity

GameObjectを一旦"非アクティブ"にしてまた"active"にしたら変数とかAwakeとかStartとかどうなるか、

曖昧認識だったので実験した。

実験としては、Main Cameraに↓のGUITest.csをアタッチ

・GUITest.cs

using UnityEngine;

public class GUITest : MonoBehaviour
{
    private GameObject _go;
    private bool _on;

    void Start()
    {
        _go = GameObject.Find("Cube");
    }

    void OnGUI()
    {
        if (GUI.Button (new Rect (20, 70, 80, 20), "Test"))
        {
            _on = !_on;
            _go.SetActiveRecursively(_on);
        }
    }
}

さらに、「Cube」のGameObjectを作成し、

それに↓をアタッチ

・ActiveTest.cs

using UnityEngine;

public class ActiveTest : MonoBehaviour
{
    private int _num = 3;

    void Awake()
    {
        Debug.Log("Awake?");
        _num = 10;
    }

    void Start()
    {
        Debug.Log("Start?");
    }

    void Update()
    {
        Debug.Log(_num);
    }
}

画面としてはこのようになる。

f:id:shinriyo:20121227101511p:image


Awake()やStart()メソッドに関して

これらのログ最初にシーンを再生した時だけで、

        Debug.Log("Awake?");
        Debug.Log("Start?");

ボタンをオン・オフして("Cube"のGameObjectがactiveと非アクティブ)も、呼ばれなかった。

「OnEnable()」メソッドは、アタッチされているGameObjectが"active"になった瞬間に呼ばれるものだが、

OnEnable()メソッドをわざわざUnityが用意してるんだから"active"時にはやっぱり"呼ばれない"のだな。

ちなみに実行順は、

Awake→OnEnable→Start」だ。


あと、変数に関して

一旦、非アクティブになってactiveになったとしても

Awake()メソッドに書いてある「_num = 10;」が実行されないが、

Update()メソッドに書いたログから"10"が出たので、非アクティブにしても

変数_numには保持されたままだ!

気をつけよう。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。

トラックバック - http://d.hatena.ne.jp/shinriyo/20121227/p1
 |