回答編集履歴

3

補足

2019/07/29 00:48

投稿

hogefugapiyo
hogefugapiyo

スコア3302

test CHANGED
@@ -1,3 +1,53 @@
1
+ # 補足
2
+
3
+ ぶつかった位置ってなるとどうしてもParticle側の位置と相手の位置をとってベクトルを作ってあげる方法しか思いつきませんでした。
4
+
5
+ ```cs
6
+
7
+ using System.Collections;
8
+
9
+ using System.Collections.Generic;
10
+
11
+ using UnityEngine;
12
+
13
+
14
+
15
+ public class ParticleTest : MonoBehaviour {
16
+
17
+
18
+
19
+ void OnParticleCollision(GameObject obj) {
20
+
21
+
22
+
23
+ var direction = obj.transform.position - transform.position;
24
+
25
+ direction = direction.normalized;
26
+
27
+ obj.GetComponent<Rigidbody>().AddForce(direction * 50);
28
+
29
+ }
30
+
31
+ }
32
+
33
+ ```
34
+
35
+
36
+
37
+ 接触点を取って計算してやるという手もあるかなと思いましたが、手元でSampleを作る際にうまくいくものができなかったので紹介だけにとどめておきます。
38
+
39
+
40
+
41
+ 自分用Unityメモ:衝突位置を取得する(トリガーの場合も)
42
+
43
+ [http://kasatanet.hatenablog.com/entry/2017/06/05/191540](http://kasatanet.hatenablog.com/entry/2017/06/05/191540)
44
+
45
+
46
+
47
+
48
+
49
+ # Old Post
50
+
1
51
  ワールドでの検知を行いたいので、Collision の Type を ``World`` にしておきます
2
52
 
3
53
 

2

補足

2019/07/29 00:48

投稿

hogefugapiyo
hogefugapiyo

スコア3302

test CHANGED
@@ -1,4 +1,4 @@
1
- 補足:ワールドでの検知を行いたいので、Collision の Type を ``World`` にしておきます
1
+ ワールドでの検知を行いたいので、Collision の Type を ``World`` にしておきます
2
2
 
3
3
 
4
4
 
@@ -53,3 +53,13 @@
53
53
  Unityのパーティクルの粒子1つ1つの衝突をスクリプトで検知する
54
54
 
55
55
  [https://gametukurikata.com/effect/particlecollision](https://gametukurikata.com/effect/particlecollision)
56
+
57
+
58
+
59
+
60
+
61
+ ※ 補足
62
+
63
+ 必ずしもParticleと衝撃が紐付いている必要もありませんので、役割を分けるという手もあります。
64
+
65
+ 爆弾なんかがわかりやすい例で、あれを作る場合は爆弾の効果範囲みたいなのを透明なTriggerで設定しておいて、爆発時にはエフェクトを表示&その範囲内にいたら吹き飛ばす。というアプローチもできます。

1

補足

2019/07/26 01:09

投稿

hogefugapiyo
hogefugapiyo

スコア3302

test CHANGED
@@ -1,8 +1,46 @@
1
+ 補足:ワールドでの検知を行いたいので、Collision の Type を ``World`` にしておきます
2
+
3
+
4
+
1
5
  Collision モジュールに``Send Collision Messages``というものがあるので、これを有効にすると、``OnParticleCollision``で衝突が取れるようになります。
2
6
 
3
7
 
4
8
 
5
9
  ``OnParticleCollision``ではゲームオブジェクト(衝突した相手)を引数に取れるので、あとはそいつに対する処理を書いてあげれば良いです。
10
+
11
+
12
+
13
+ Sample - Particleがヒットした相手をY軸に打ち上げます
14
+
15
+ ```cs
16
+
17
+ using System.Collections;
18
+
19
+ using System.Collections.Generic;
20
+
21
+ using UnityEngine;
22
+
23
+
24
+
25
+ public class ParticleTest : MonoBehaviour {
26
+
27
+
28
+
29
+ void OnParticleCollision(GameObject obj) {
30
+
31
+ if (obj.GetComponent<Rigidbody>()) {
32
+
33
+ obj.GetComponent<Rigidbody>().AddForce(new Vector3(0, 10, 0), ForceMode.Impulse);
34
+
35
+ }
36
+
37
+ }
38
+
39
+ }
40
+
41
+ ```
42
+
43
+
6
44
 
7
45
 
8
46