【Unity】他のスクリプトを一括で取得して有効化・無効化を制御する

公開日: : 最終更新日:2017/09/22 3DCG, Unity

スポンサーリンク

Unityを使っていて他のスクリプトを一時的に停止させたいと思ったのですが、ぱっと出てくるものを見つけられなかったのでメモ。ちなみにバージョンは5.6です。

GetComponentsで他のアタッチされているスクリプトを一括で取得します。アタッチできるスクリプトは基本的にMonoBehaviourを継承しているため、受け皿としてはMonoBehaviourの配列にすればOKです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ScriptController  {

	//制御対象のスクリプト
	MonoBehaviour[] scripts ;
	MonoBehaviour that;

	//初期化
	public void Initialize (MonoBehaviour that) {
		//アタッチされている他のスクリプトを取得する
		scripts = that.GetComponents<MonoBehaviour> ();
		this.that = that;
	}

	//スクリプトを無効にする
	public void Suspend(){
		for (int i = 0; i < scripts.Length; i++) {
			//自分自身は除外する
			if (scripts [i].GetInstanceID () == that.GetInstanceID()) {
				continue;
			}
			scripts [i].enabled = false;
		}
	}
	//スクリプトを有効にする
	public void Resume(){
		for (int i = 0; i < scripts.Length; i++) {
			//自分自身は除外する
			if (scripts [i].GetInstanceID () == that.GetInstanceID()) {
				continue;
			}
			scripts [i].enabled = true;
		}
	}
}

制御する側は上記ScriptControllerクラスを定義してStartやAwakeで初期化してその後、停止処理や再開処理を走らせることで他のスクリプトを無効にしたりします。

例えば、下記のようなTestクラスになります。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour {
	ScriptController sc = new ScriptController();
	
	// Use this for initialization
	void Start () {
		sc.Initialize (this);
		sc.Suspend ();
	}
	
	// Update is called once per frame
	void Update () {
	}
}

これをアタッチすると他のスクリプトは走らないようになります。以後の処理にて停止や再開をうまく操作することで他のスクリプトを操ることができます。

他にいい方法がありそうな気もしますが、こういうこともできるということで紹介しました。

スポンサーリンク
Amazon

  • このエントリーをはてなブックマークに追加

関連記事

[Python3]Webスクレイピングで繰り返し構造のデータを取得する

Python3のBeautifulSoup4でWebスクレイピングをし

2D写真から立体視画像を作成してみた

 カメラなどで撮影した写真からデプス(距離)画像を推定する技術でステレ

ディープラーニングの単眼画像Depth推定を試す

前々から気になっていた写真から立体を推定するCNNのディープラーニン

PyCharmとAnacondaの仮想環境を連携する手順

 PyCharmはデフォルトで仮想環境はVirtualenvを使うよう

【Python】正規表現で括弧で特定の文字列を抽出する方法

Pythonの正規表現で括弧を使って文字列を抽出するサンプルを作成しま

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。