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 は「神の領域」らしいです.