2012年5月15日火曜日

Unity: GameObjectの非表示2つの方法と削除

GameObjectをスクリプトから、一時的に非表示にする方法を試してみました。
Unityでは、以下の2つの方法が一般的なようです。
  • MeshRendererをdisableにする
  • SetActiveRecursively()でdeactivateする

MeshRendererをdisableにする

例として、以下のようなスクリプトをGameObjectに追加します。
using UnityEngine;
using System.Collections;

public class ScriptObjTest : MonoBehaviour {
    int count = 0;

    void Start () {
        // 描画をしないだけなので、Update()関数は呼ばれ続ける。
        renderer.enabled = false;
    }
    
    void Update () {
        ++count;
        Debug.Log("count = "+count);
    }
}
rendererはGameObjectが保持しているMeshRendererオブジェクトです。
このenabledをfalseにすると、描画が行われなくなります。

しかし、表示がされないだけで、Update()関数はコールされ続けます。
実行中のConsoleログを見ると、count変数が表示されるのが確認できると思います。

SetActiveRecursively()でdeactivateする

Start()関数を以下のように書き換えます。
void Start () {
    gameObject.SetActiveRecursively(false);
}
SetActiveRecursively(false)は、gameObjectとそのすべての子のGameObjectの活動を停止させます。
こちらの場合は、描画はもちろんのこと、追加しているスクリプトの活動も止まるので、Update()関数もコールされなくなります。

また、Find()関数による検索対象からも外されるようです。
以下のサイトを参考にさせて頂きました。
Yaminabe:うにばな (講座みたいなもの 第五回) - livedoor Blog(ブログ)

GameObjectの削除

もう使用しないGameObjectを削除する場合は、Destroy()関数を使います。
例えば先ほどのスクリプトを以下のように書き換えてみます。
void Start () {
	Destroy(gameObject);
}
このようにすると、実行と同時にgameObjectが削除されます。

関連記事


0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...