【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で変換すると良いです。