【Unity】トリガーを通った時にエフェクトを出す

投稿者: | 2021-05-13

「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にチェックを入れると同じことができました。

コメントを残す

メールアドレスが公開されることはありません。