最初から接触しているオブジェクトが確定しているのならば、
変数に接触しているオブジェクトを登録しておけば、SendMessage()で値を渡すことができると思います。
下記の例では、接触を判定するHitObjectB.csとSendMessageを受け取るHitObjectC.csに分けて処理しています。
C#
1public class HitObjectB : MonoBehaviour
2{
3 // 登録している接触中オブジェクト
4 [SerializeField]
5 private GameObject m_adjacentObject = null;
6 [SerializeField]
7 private int m_valueB = 10;
8
9
10 void OnCollisionEnter( Collision i_collision )
11 {
12 if( i_collision.gameObject == m_adjacentObject )
13 {
14 return;
15 }
16
17 if( m_adjacentObject != null )
18 {
19 m_adjacentObject.SendMessage( "HitMessage", m_valueB );
20 }
21 }
22
23 void OnCollisionExit( Collision i_collision )
24 {
25 if( i_collision.gameObject == m_adjacentObject )
26 {
27 return;
28 }
29
30 if( m_adjacentObject != null )
31 {
32 m_adjacentObject.SendMessage( "ReleaseMessage", m_valueB );
33 }
34 }
35
36} // class HitObjectB
C#
1public class HitObjectC : MonoBehaviour
2{
3 void HitMessage( int i_value )
4 {
5 Debug.Log( i_value );
6
7 // 接触テストとして、Messageが送られたらマテリアルの色を赤にする
8 var render = GetComponent<Renderer>();
9 if( render != null )
10 {
11 render.material.color = Color.red;
12 }
13 }
14
15 void ReleaseMessage( int i_value )
16 {
17 Debug.Log( i_value );
18
19 // 接触テストとして、Messageが送られたらマテリアルの色を白にする
20 var render = GetComponent<Renderer>();
21 if( render != null )
22 {
23 render.material.color = Color.white;
24 }
25 }
26
27} // class HitObjectC
コリジョンをTriggerとして使用している場合は、
OnCollisionEnter()とOnCollisionExit()をそれぞれ
OnTriggerEnter()とOnTriggerExit()に変更して試してみてください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/05/21 05:33
2016/05/21 07:46 編集
退会済みユーザー
2016/05/22 01:42 編集
2016/05/22 05:02
退会済みユーザー
2016/06/05 08:02