ikoan unity 開発メモ

Unityに関するアレコレを日々つづっていこうと思います

パーティクルを一点に収束させる

環境

Unity2018.2.10f1

概要

パーティクルを一点に収束させる方法として、Emit中心に収束させるのはよく見かけますが、Emit後に全く別の場所に収束させる方法というのはなかなか見かけません。
どうにかできないかな、と思い、無理やりやって見ました。

実装

要は発射されたパーティクルの位置を無理やり書き換えてしまえばいいわけですね。
過去のUnityではパーティクルの情報をスクリプトから書き換えることは確かできなかったのですが、いつからかできるようになっていました。


Emitされたパーティクルの位置を更新する

基本的には毎フレーム、発射されたパーティクルの位置を無理やり書き換えることで対応しています。
条件式のところには、収束し始めるタイミングを入れるといいと思います。
そうしないと発射直後から一点に向かい始めてしまうので(汗。

ただ、この方法は表示されるパーティクル数が少なければいいのですが、そうでない場合、確実にCPUに大きな負荷を与えることになります。
また、収束の仕方も現在のpositionと収束positionのLerpを取っていますが、もっといいやり方があるとは思っています。が、とりあえずはこんなもので。

まとめ

パーティクル数が少ないなどの、限定条件下ではこのやり方が実装手順的にも一番楽ではないかと思います。
とはいえ、パーティクル数が多くなるとマズそうなので、GPUに委ねるやり方や並列処理を使った擬似パーティクルの実装も検討していきたいところですね。