Unity-他のスクリプトへメッセージ送信

C#なんてわしゃやらんよ,,けどちびっとかいてみる,,

Unityでの他のオブジェクトへメッセージを送る方法です

SendMessageというものをつかいます.

同じゲームオブジェクト内のスクリプトであれば,こんなことしなくても,関数名だけで動きますよ〜

またこのほかにfindで探させる方法もあります.この場合はタグをつけてあげるのもいいでしょう.また,BroadcastMessageというのもあります.

たぶんその面クリア!なんていうときに,「敵というタグ」のついたオブジェクト全部に一斉に自爆指令を放送してメッセージを送るとかに使うのかな?


本題です.

スクリプトは2つからなります

(1)受信側のスクリプト test1.cs

16行目にpublicがついています.これが必要なようです.

using UnityEngine;
using System.Collections;

public class test1 : MonoBehaviour {

	// Use this for initialization
	void Start () {

	}

	// Update is called once per frame
	void Update () {

	}

	public void neko(bool mybool){//publicで他からsendできます.メッセージがここで受信します.引数はブーリアンでmyboolに格納します
		Debug.Log(mybool);//myboolに格納されたブーリアンを出力します
	}
}

 (2)送信側のスクリプト  testzero.cs

これを実行すると画面にボタンが表示されます.

using UnityEngine;
using System.Collections;

public class testzero : MonoBehaviour {
	public GameObject player;//playerという名のゲームオブジェクトを指定します
//UnityのGUI側にゲームオブジェクトを選択できるGUIができますので,そこに受信側のスクリプトが含まれているゲームオブジェクトをアサインしてください.例えばCreate EmptyでスクリプトだけあてたゲームオブジェクトでもOKです

	// Use this for initialization
	void Start () {

	}
	void OnGUI() {

		if (GUI.Button(new Rect(10, 70, 50, 30), "Click"))//GUIボタン表示
		player.SendMessage("neko", true);//playerにアサインされたスクリプトのうち neko というクラスにアクセスし trueを引数で渡します
	}
	// Update is called once per frame
	void Update () {

	}
}

そのボタンをクリックするとコンソールにtrueと表示されます.

これ,Javascriptでは

function neko(mybool:bool){//引数の型の定義は不要だったかな?
//処理
}

 

では動作しません

static function neko(mybool:bool){
//処理
}

staticをつけると動きます.

どこかに書いてましたが static は「神の領域」らしいです.