Visual Effect Graphのパーティクルの速度をスクリプト制御する

投稿者: | 2020-02-17


マウスで示した方向へパーティクルを飛ばします。

デフォルトのVisual Effect Graphを少しだけ変更します。

Initialize Particleコンテキストの「Set Velocity Random」ブロックを消して、「Set Velocity」ブロックを追加し、Vector3のノードをつなげます。

Vector3は右クリック -> Convert to Propertyでプロパティにして、Exposedにチェックをいれて外から変更できるようにします。

Visual Effectオブジェクトにスクリプトを付けます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.VFX;


public class VFXScript3 : MonoBehaviour
{
    VisualEffect vfx;
    Vector3 mousePosition;
    Vector3 particleVelocity;
    Plane groundPlane;
    float rayDistance;
    Ray ray;

    // Start is called before the first frame update
    void Start()
    {
        groundPlane = new Plane();
        groundPlane.SetNormalAndPosition(Vector3.up, transform.position);
        vfx = GetComponent<VisualEffect>();
    }

    // Update is called once per frame
    void Update()
    {
        vfx.SetVector3("mousePos", GetCursorPosition3D() - transform.position);
    }

    Vector3 GetCursorPosition3D()
    {
        ray = Camera.main.ScreenPointToRay(Input.mousePosition); // マウスカーソルから、カメラが向く方へのレイ
        groundPlane.Raycast(ray, out rayDistance); // レイを飛ばす

        return ray.GetPoint(rayDistance); // Planeとレイがぶつかった点の座標を返す
    }
}

Plane.SetNormalAndPosition(Vector3.up, transform.position) で、Visual Effectがある位置に上向きで平面を配置して、マウスカーソルからカメラの方向へ飛ばしたレイが平面とぶつかるところの3D空間の座標を取得し、その方向へパーティクルを飛ばします。

コメントを残す

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