マウスで示した方向へパーティクルを飛ばします。
デフォルトの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空間の座標を取得し、その方向へパーティクルを飛ばします。