前の記事では動かないオブジェクトを使いましたが、今回はアニメーションで動いているオブジェクトにパーティクルを衝突させてみます。
シーン上にVisual EffectとSphereを配置しています。
新規のVisual Effect GraphのUpdateコンテキストに、「Gravity」と「Collide with Sphere」のブロックを付けます。
「Sphere」の横の「L」マークをクリックして「W」のワールド座標にして、「Center」と「Radius」に、「Vector3」と「float」のノートを接続します。
各ノードで右クリックして、「Convert to Property」で外部から値を取得できるようにします。
右上の「Blackboard」ボタンからBlackboardを表示し、プロパティの名前を適当に変更して、「Exposed」にチェックを入れます。
このエフェクトをアタッチしたVisual Effectオブジェクトにスクリプトを付けます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.VFX;
public class VFXScript5 : MonoBehaviour
{
public GameObject sphere;
VisualEffect vfx;
// Start is called before the first frame update
void Start()
{
vfx = GetComponent<VisualEffect>();
}
// Update is called once per frame
void Update()
{
vfx.SetVector3("Center", sphere.transform.position);
vfx.SetFloat("Radius", sphere.transform.localScale.x / 2);
}
}
Setメソッドで今設定したプロパティに、Sphereオブジェクトの位置とスケールの半分の値を渡しています。
Sphereオブジェクトにアニメーションを付けてこれらの値を変化させると、パーティクルが衝突する範囲もそれに沿って移動するので、Sphereオブジェクトにパーティクルが衝突しているように見えます。