質問編集履歴

2

内容の充実化

2022/01/07 12:23

投稿

akaevaka
akaevaka

スコア8

test CHANGED
File without changes
test CHANGED
@@ -24,11 +24,19 @@
24
24
 
25
25
  ![イメージ説明](829efbad09f8cf0c23fd98e92963c838.png)
26
26
 
27
+ ![イメージ説明](b3b76feaedd7cd5412d3de6215530517.png)
28
+
27
29
  ![イメージ説明](6be309b0d2f38e0a83f357636b49cb24.png)
30
+
31
+ ![イメージ説明](6650fe8e1d593d9dc19dda02bf603094.png)
32
+
33
+ ![イメージ説明](35796892838bec2d4012b2457d8f526e.png)
28
34
 
29
35
 
30
36
 
37
+
38
+
31
- ###CatchBallにつけたスクリプト
39
+ ###CatchBallにつけたスクリプト:Collision Action
32
40
 
33
41
  ```C#
34
42
 
@@ -90,7 +98,7 @@
90
98
 
91
99
 
92
100
 
93
- ###CatchMonsterにつけたスクリプト
101
+ ###CatchMonsterにつけたスクリプト:Collision Reaction
94
102
 
95
103
  ```C#
96
104
 

1

内容の充実化

2022/01/07 12:23

投稿

akaevaka
akaevaka

スコア8

test CHANGED
File without changes
test CHANGED
@@ -1,20 +1,24 @@
1
1
  ###質問内容
2
2
 
3
- 3Dオブジェクトのsphere(以下CatchBall)を,Asset storeで無料で取得できる緑色のモンスター(以下CatchMonster)に衝突させた際にOnCollisionEnterでコンソールにログを出力したいのだが,衝突させてみてもログを出してくれないので原因は何かを教えていただきたい.
3
+ 3Dオブジェクトのsphere(以下CatchBall)を,Asset storeで無料で取得できる緑色のモンスター(以下CatchMonster)に衝突させた際にCatchBallにつけたスクリプトのOnCollisionEnterでコンソールにログを出力したいのだが,衝突させてみてもログを出してくれないので原因は何かを教えていただきたい.
4
4
 
5
5
 
6
6
 
7
7
  ###状況
8
8
 
9
- 「UnityによるARゲーム開発」という本を参考.
9
+ 「UnityによるARゲーム開発」という本を参考.
10
10
 
11
- 直そうと[参考にしてみたサイト](https://dkrevel.com/oncollisionenter-not-working/)
11
+ 直そうと[参考にしてみたサイト](https://dkrevel.com/oncollisionenter-not-working/)
12
12
 
13
- CatchMonsterとCatchBallの衝突,跳ね返りは起こる.
13
+ CatchMonsterとCatchBallの衝突,跳ね返りは起こる.
14
14
 
15
- CatchBallどうしの衝突ではきちんと検知されログが出力される
15
+ CatchBallどうしの衝突ではきちんと検知されログが出力される
16
16
 
17
- CatchMonsterはis Kinematicとなっているが,CatchBallのほうはしてないため反応はするはず(Kinematicを外してみてもログは出力されなかった)
17
+ CatchMonsterはis Kinematicとなっているが,CatchBallのほうはしてないため反応はするはず(Kinematicを外してみてもログは出力されなかった)
18
+
19
+ ・CatchMonsterの方はCatchBallと衝突するとOncollisionEnterが反応する
20
+
21
+
18
22
 
19
23
 
20
24
 
@@ -23,6 +27,8 @@
23
27
  ![イメージ説明](6be309b0d2f38e0a83f357636b49cb24.png)
24
28
 
25
29
 
30
+
31
+ ###CatchBallにつけたスクリプト
26
32
 
27
33
  ```C#
28
34
 
@@ -81,3 +87,105 @@
81
87
 
82
88
 
83
89
  ```
90
+
91
+
92
+
93
+ ###CatchMonsterにつけたスクリプト
94
+
95
+ ```C#
96
+
97
+ using UnityEngine;
98
+
99
+ using System.Collections;
100
+
101
+ using UnityEngine.Events;
102
+
103
+
104
+
105
+ namespace packt.FoodyGO.PhysicsExt{
106
+
107
+ public class CollisionReaction : MonoBehaviour{
108
+
109
+ public string collisionObjectName;
110
+
111
+
112
+
113
+ public CollisionEvent collisionEvent;
114
+
115
+ public Transform particlePrefab;
116
+
117
+ public float destroyParticleDelaySeconds;
118
+
119
+ public bool destroyObject;
120
+
121
+ public float destroyObjectDelaySeconds;
122
+
123
+
124
+
125
+ public void OnCollisionReaction(GameObject go, Collision collision){
126
+
127
+ ContactPoint contact = collision.contacts[0];
128
+
129
+ Quaternion rot = Quaternion.FromToRotation(Vector3.up, contact.normal);
130
+
131
+ Vector3 pos = contact.point;
132
+
133
+
134
+
135
+ if (particlePrefab != null){
136
+
137
+ Debug.Log("Monster hit");
138
+
139
+ var particle = (Transform)Instantiate(particlePrefab, pos, rot);
140
+
141
+ Destroy(particle.gameObject, destroyParticleDelaySeconds);
142
+
143
+ }
144
+
145
+ if (destroyObject){
146
+
147
+ Debug.Log("Monster hit");
148
+
149
+ Destroy(go, destroyObjectDelaySeconds);
150
+
151
+ }
152
+
153
+
154
+
155
+ collisionEvent.Invoke(gameObject, collision);
156
+
157
+ }
158
+
159
+
160
+
161
+ public void OnCollisionEnter(Collision collision){
162
+
163
+ Debug.Log("hhit");
164
+
165
+ }
166
+
167
+ }
168
+
169
+
170
+
171
+
172
+
173
+
174
+
175
+ [System.Serializable]
176
+
177
+ public class CollisionEvent : UnityEvent<GameObject, Collision>
178
+
179
+ {
180
+
181
+
182
+
183
+ }
184
+
185
+
186
+
187
+ }
188
+
189
+
190
+
191
+ ```