Visual Effect Graphのパーティクルを動いているものに衝突させる

投稿者: | 2020-02-18


前の記事では動かないオブジェクトを使いましたが、今回はアニメーションで動いているオブジェクトにパーティクルを衝突させてみます。

シーン上に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オブジェクトにパーティクルが衝突しているように見えます。

一人称ステルスホラーゲームをitch.ioで公開しました。

https://www.ame-name.com/archives/13822

コメントを残す

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