「VFX Trigger Event Binder」コンポーネントを使って、トリガーにオブジェクトが出入りしたときなどに、自動でVisual Effectがスタートするようにしてみました。
VFXグラフを作る
VFXグラフは、衝突したときにエフェクトのイベントを発生させると同様に、OnPlayイベントによって、一度だけパーティクルが出るようにしています。
また、Initializeコンテキストで、positionイベントアトリビュートが位置に設定されます。
それによって、トリガーを作動させたオブジェクトの位置でパーティクルが出るようになります。
「VFX Trigger Event Binder」コンポーネント
今回は、プレイヤーが発射するボールのオブジェクトに「VFX Trigger Event Binder」コンポーネントを付けました。ボールのコライダーでは、Is Triggerにチェックを入れます。
Targetに、上のVFXグラフが付いたVisual Effectオブジェクトをアタッチし、イベント名を入れます。
Collidersには、このボールのトリガーが作動したときにエフェクトを出したいコライダーをアタッチしています。これらはシーンにいくつか配置したCubeです。
Activationでは、イベントが送られるタイミングを設定できます。「On Enter」はトリガーに入ったとき、「On Exit」は出たとき、「On Stay」は入っている間です。
これで、ボールがCubeに当たったときに、Cubeの位置からエフェクトが出るようになりました。
ボールを発射するスクリプト
FPSキャラの頭にボールを発射するスクリプトを付けています。ボールは発射のたびにインスタンス化するのでなく、シーンに一つあるものを使いまわしています。
using UnityEngine;
public class ShootBall : MonoBehaviour
{
[SerializeField] Rigidbody ball; //シーンのボール
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if(Input.GetMouseButtonDown(0))
{
ball.velocity = default;
ball.angularVelocity = default;
ball.transform.position = transform.position + transform.forward * 1.5f;
ball.AddForce(transform.forward * 20f, ForceMode.Impulse);
}
}
}
FPSキャラクターを使う
「VFX Trigger Event Binder」コンポーネントを、FPSキャラクターにつけてみました。
Activationは「On Exit」にしました。
キャラクターコントローラーはコライダーなので、新しくコライダーは付けていません。
この場合、シーンにいくつかあるCubeのコライダーのIs Triggerにチェックを入れると同じことができました。