【Unity】再生中のパーティクルの位置を取得する

DEVELOP, Unity

アニメーション再生中のパーティクルの座標はGameObjectのTransformが動いている訳ではないので単純にtransform.positionでは取得できません。

困っていたところ Unityユーザー助け合い所にて助言頂きました。感謝!

Particleの座標取得方法

ParticleSystem.GetParticles()でパーティクル一粒単位毎の再生中の位置情報などが取得できる。

public class SampleView : MonoBehaviour
{
	[SerializeField, Header("座標取得対象のパーティクル")]
	private ParticleSystem m_targetParticleSystem;
	public ParticleSystem targetParticleSystem
	{
		get { return m_targetParticleSystem; }
	}
	void Update()
	{
		// 当たり判定用オブジェクトをパーティクルに追従
		if (targetParticleSystem.particleCount > 0)
		{
			var particleCount = targetParticleSystem.particleCount;
			ParticleSystem.Particle[] targetParticles = new ParticleSystem.Particle[particleCount];
			targetParticleSystem.GetParticles(targetParticles);
			foreach(var particle in targetParticles)
			{
				Debug.Log($"particle localPosition {particle.position}");
				var worldPosition = targetParticleSystem.transform.TransformPoint(particle.position);
				Debug.Log($"particle worldPosition {worldPosition}");
			}
		}
	}
}

サンプルコードの様にワールド座標が欲しければTransformPointで変換すると良いです。

再生中のパーティクルのpositionに球を置いてみたの図。

Posted by kazupon