【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

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

関連記事

あなたの腹痛を劇的に改善するたった一つのシンプルな方法

はじめに 私は昔からよくおなかを壊してトイレに駆け込むことが多かった

無料のDAZ Studioに課金しまくってわかったこと

はじめに  初めにお断りしておきますがこれから書く意見はあくまで素人

[最後のレストラン]ジャンヌ「出来らあっ!」

はじめに 「スーパーくいしん坊」という漫画の有名なシーンがこちら

[日本株]特定の個別銘柄の大株主一覧をネットで見る方法

 個別株を購入する際に大株主情報をネットで検索して参考にしようと思った

[DAZ Studio]目線をカメラに向ける方法

DAZ Studioでフィギュアの目線をカメラに向ける方法についてです

→もっと見る

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