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 件のコメント:
コメントを投稿