GameObjectにParticleをセットして、いざスクリプトから動かしてみると「なぜか座標がズレて描画されてしまう…」と困ったことはありませんか?
今回は、そんなParticleSystemの描画座標が意図しない場所になってしまう現象の原因と、スクリプトからの簡単な解決方法をメモとして残しておきます。
目次
なぜParticleSystemの座標はズレるのか?
結論から言うと、座標がズレてしまうのは「描画する座標が、実際に描画されるタイミングよりも事前に計算されてしまっているため」です。
Unityの仕様上、オブジェクトを移動させた直後にパーティクルを発生(Emit)させようとしても、内部の計算タイミングのズレによって、移動前の古い座標を基準にパーティクルが描画されてしまうことがあります。
解決策:Emit直前に強制で再計算させる
そんな時は、パーティクルを Emit する直前に、強制的に時間をリセットして計算し直させることでズレが綺麗に解消します!
具体的な解決アプローチとして、Simulate(0f) というメソッドを使用します。
実際のコード例
実際に私が座標ズレを解消した際のコードスニペットです。
// パーティクルの時間を0秒目にリセットして強制再計算
particle.Simulate(0f);
// その直後にパーティクルを発生させる
particle.Emit(1);
Unityに関する記事一覧
記事が見つかりませんでした。

