Unityのエフェクトを弾に使うときに詰まったこと

シューティングゲーム的な何かをつくっているんですが、パーティクルシステムを使って弾丸を作ろうと思いました。

最初は公式のリファレンスにあるように、プレハブを使ってゲームオブジェクトとして弾丸にしようと思ったんですが、パーティクルでやった方が手間が省ける部分もありそうなのでパーティクルシステムを使うことに。

そのときに気づいたことをMEMO


パーティクルを弾として使うときのいいところ

  • 発射角度や弾数をインスペクターから設定できる。
  • スクリプトからでも変更しやすい。
  • パーティクル自体が弾っぽい。
  • よくわからなくても設定を変えるだけでそれなりに格好よくなったりする。
  • LifeTimeとCollisionモジュールのLifeTimeLossを使えば弾の寿命なんかも調整できそう(使わなかったけど)。

不便だったところ

  • パーティクル同士は衝突しない(多分できないはず)。
  • レーザーのような、敵に当たっても貫通するような処理ができなかった。跳ね返ったり衝突判定が取れなかったりした。コライダーのトリガーのような処理は可能。
  • てきとーでも、それなりに格好よくなったりはするけど、目的のエフェクトを作ろうと思ったら設定についてちゃんと理解する必要がある。

詰まったところ

1.弾の衝突判定の取得

解決策:

CollisionモジュールのSendCollisionMessageをオンに。

スクリプト側ではOnParticleCollision()内で処理。

TypeはWorldの方が色々上手くいきそう。僕が作ったのは2DだったんでTypeはWorldでModeは2Dにしました。

2.弾の発射体が動くと放出されたパーティクル自体も動く。

わからないと唸ってたらteratileという質問サイトを発見。

質問したら親切に答えてくださいました。

解決策:

MainモジュールのSimulation SpaceをWorldにした。

これだけでうまくいったけど、4時間くらい迷った……。

10分で解決した。ちゃんとリファレンスとか読まないとダメだなと思いました。


本も買ってみたり。

Unity ゲームエフェクト入門 Shurikenで作る! ユーザーを引き込む演出手法 (Smart Game Developer)

用例がたくさん載っています。雨とか状態異常とかいろいろ。