回答編集履歴

1

補足内容に合わせて、回答を修正

2016/05/22 05:01

投稿

urahimono
urahimono

スコア714

test CHANGED
@@ -1,30 +1,34 @@
1
- 現在接触しているオブジェクトを変数として保存しておく必要があと思います。
1
+ 最初から接触しているオブジェクトが確定してのならば、
2
2
 
3
- 以下のサンプルではオブジェクトにHitObjectというコンポーネントつけて処理しています。
3
+ 変数に接触しているオブジェクトを登録しておけば、SendMessage()で値を渡すことができると思います。
4
4
 
5
5
 
6
6
 
7
- ![イメージ説明](ce596b6bcdeb3b5ca71dbf3889b3c530.png)
7
+ 下記の例では、接触を判定するHitObjectB.csとSendMessageを受け取るHitObjectC.csに分けて処理しています。
8
8
 
9
9
 
10
10
 
11
- __HitObject.cs__
11
+ ![イメージ説明](5b69c0191167884fc813f15fbdbbcafe.png)
12
+
13
+
12
14
 
13
15
  ```C#
14
16
 
15
- using UnityEngine;
16
-
17
- using System.Collections.Generic;
18
-
19
-
20
-
21
- public class HitObject : MonoBehaviour
17
+ public class HitObjectB : MonoBehaviour
22
18
 
23
19
  {
24
20
 
25
- // 現在接触しているオブジェクトのリスト
21
+ // 登録している接触中オブジェクト
26
22
 
23
+ [SerializeField]
24
+
27
- private List<GameObject> m_hitList = new List<GameObject>();
25
+ private GameObject m_adjacentObject = null;
26
+
27
+ [SerializeField]
28
+
29
+ private int m_valueB = 10;
30
+
31
+
28
32
 
29
33
 
30
34
 
@@ -32,19 +36,23 @@
32
36
 
33
37
  {
34
38
 
35
- // 現在接触しているオブジェクトにSendMessage()を送る
36
-
37
- foreach( var hit in m_hitList )
39
+ if( i_collision.gameObject == m_adjacentObject )
38
40
 
39
41
  {
40
42
 
41
- hit.SendMessage( "HitMessage" );
43
+ return;
42
44
 
43
45
  }
44
46
 
45
47
 
46
48
 
49
+ if( m_adjacentObject != null )
50
+
51
+ {
52
+
47
- m_hitList.Add( i_collision.gameObject );
53
+ m_adjacentObject.SendMessage( "HitMessage", m_valueB );
54
+
55
+ }
48
56
 
49
57
  }
50
58
 
@@ -54,17 +62,21 @@
54
62
 
55
63
  {
56
64
 
57
- m_hitList.Remove( i_collision.gameObject );
65
+ if( i_collision.gameObject == m_adjacentObject )
66
+
67
+ {
68
+
69
+ return;
70
+
71
+ }
58
72
 
59
73
 
60
74
 
61
- // 現在接触しているオブジェクトにSendMessage()を送る
62
-
63
- foreach( var hit in m_hitList )
75
+ if( m_adjacentObject != null )
64
76
 
65
77
  {
66
78
 
67
- hit.SendMessage( "ReleaseMessage" );
79
+ m_adjacentObject.SendMessage( "ReleaseMessage", m_valueB );
68
80
 
69
81
  }
70
82
 
@@ -72,11 +84,27 @@
72
84
 
73
85
 
74
86
 
87
+ } // class HitObjectB
88
+
89
+ ```
75
90
 
76
91
 
92
+
93
+
94
+
95
+ ```C#
96
+
97
+ public class HitObjectC : MonoBehaviour
98
+
99
+ {
100
+
77
- void HitMessage()
101
+ void HitMessage( int i_value )
78
102
 
79
103
  {
104
+
105
+ Debug.Log( i_value );
106
+
107
+
80
108
 
81
109
  // 接触テストとして、Messageが送られたらマテリアルの色を赤にする
82
110
 
@@ -94,9 +122,13 @@
94
122
 
95
123
 
96
124
 
97
- void ReleaseMessage()
125
+ void ReleaseMessage( int i_value )
98
126
 
99
127
  {
128
+
129
+ Debug.Log( i_value );
130
+
131
+
100
132
 
101
133
  // 接触テストとして、Messageが送られたらマテリアルの色を白にする
102
134
 
@@ -114,11 +146,11 @@
114
146
 
115
147
 
116
148
 
117
- } // class HitObject
149
+ } // class HitObjectC
118
150
 
119
151
  ```
120
152
 
121
- ![イメージ説明](bcaf692b5e90c149a138f9fb6b52e841.gif)
153
+ ![イメージ説明](1f92372b87ba59b999fda2b6b64d69f9.gif)
122
154
 
123
155
 
124
156