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が削除されます。
関連記事
- Unity: Transform.LookAt()の回転軸を制限する
- Unity: スクリプトからMainCameraにアクセスする方法
- Unity: オブジェクトが何者かをC#的に知る方法
- Unity: Random.Range()の範囲がfloatとintで違う
0 件のコメント:
コメントを投稿