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