パーティクルを一点に収束させる
環境
Unity2018.2.10f1
概要
パーティクルを一点に収束させる方法として、Emit中心に収束させるのはよく見かけますが、Emit後に全く別の場所に収束させる方法というのはなかなか見かけません。
どうにかできないかな、と思い、無理やりやって見ました。
実装
要は発射されたパーティクルの位置を無理やり書き換えてしまえばいいわけですね。
過去のUnityではパーティクルの情報をスクリプトから書き換えることは確かできなかったのですが、いつからかできるようになっていました。
基本的には毎フレーム、発射されたパーティクルの位置を無理やり書き換えることで対応しています。
条件式のところには、収束し始めるタイミングを入れるといいと思います。
そうしないと発射直後から一点に向かい始めてしまうので(汗。
ただ、この方法は表示されるパーティクル数が少なければいいのですが、そうでない場合、確実にCPUに大きな負荷を与えることになります。
また、収束の仕方も現在のpositionと収束positionのLerpを取っていますが、もっといいやり方があるとは思っています。が、とりあえずはこんなもので。
まとめ
パーティクル数が少ないなどの、限定条件下ではこのやり方が実装手順的にも一番楽ではないかと思います。
とはいえ、パーティクル数が多くなるとマズそうなので、GPUに委ねるやり方や並列処理を使った擬似パーティクルの実装も検討していきたいところですね。