###前提・実現したいこと
通常、CubeのOnCollisionEnter( )の処理を書きたい場合、そのCubeにアタッチしているスクリプトファイルでOnCollisionEnter( )の処理を書くと思います。
C#
1using UnityEngine; 2using System.Collections; 3 4public class CubeScript : MonoBehaviour { 5 6 void OnCollisionEnter(Collision col){ 7 Debug.Log ("test"); 8 } 9}
しかし、他のゲームオブジェクト(下図ではGameObject)にアタッチしているスクリプトファイルから、CubeのOnCollisionEnter( )の処理を書きたい場合はどうすればよいのでしょうか?
それともそれは不可能なのでしょうか?
###試したこと
GameObjectにアタッチしているスクリプトから、Cubeオブジェクトを取得。
C#
1using UnityEngine; 2using System.Collections; 3 4public class GameObjectScript : MonoBehaviour { 5 6 // Use this for initialization 7 void Awake () { 8 GameObject cube = GameObject.Find ("Cube"); 9 } 10}
これより先の記述がわかりません。
ご教授お願い致します。
###追記
ご回答いただいた方法で、まず値を渡さない方法で試してみました。
イベントを受け取るようになったのですが、受け取りの際(OnCollisionEnterEvent)、senderを利用してみたいと思いました。CubeScriptでthisを渡しているので、senderはCubeだと思うのですが、このsender(Cube)を操作することができません。sender(Cube)の操作方法のご教授お願い致します。
C#
1public class CubeScript : MonoBehaviour { 2 3 // 値を渡さない 4 public event EventHandler OnCollisionEnterEvent = delegate { }; 5 6 void OnCollisionEnter(Collision col) 7 { 8 // 値を渡さない 9 OnCollisionEnterEvent(this, EventArgs.Empty); 10 } 11 12}
C#
1public class GameObjectScript : MonoBehaviour { 2 3 void Awake(){ 4 5 // コンポーネント(CubeScript)を取得 6 CubeScript cubeScript = GameObject.Find ("Cube").GetComponent<CubeScript> (); 7 8 // イベントを設定 9 cubeScript.OnCollisionEnterEvent += delegate (object sender, EventArgs e) { 10 Debug.Log(sender); //Cube (CubeScript) 11 sender.transform.position = Vector3.zero; //senderはCubeのはず。ここでエラー。 12 }; 13 } 14 15}
キャストしてもエラーになりました。
C#
1 (GameObject)sender.transform.position = Vector3.zero; //senderはCubeのはず。ここでエラー。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/08/21 12:37
2016/08/21 13:39 編集
退会済みユーザー
2016/08/22 15:43