【Unity】動くオブジェクトからエフェクトを出す

投稿者: | 2021-04-29

アニメーションで動き続けるオブジェクトの面の同じ場所から、エフェクトが出続けるようにしてみました。

VFXグラフを作る

まず、エフェクトを一発ずつ出すのVFXグラフのスポーンのブロックを変えて、パーティクルを一つずつ定期的に出すようにしました。

エフェクトを出す

スクリプトでは、マウスクリックしたところに空のゲームオブジェクトを置いて、その位置や方向ををエフェクトのプロパティに設定し続けます。

このオブジェクトはレイが当たったオブジェクトの子にするので、アニメーションとともに、エフェクトが出る場所や方向も動きます。

using UnityEngine;
using UnityEngine.VFX;

public class EffectTest : MonoBehaviour
{
    [SerializeField] VisualEffect vfx;
    Transform point; // エフェクトが出る場所

    // Start is called before the first frame update
    void Start()
    {
        point = new GameObject().transform;
        vfx.Play();
    }

    // Update is called once per frame
    void Update()
    {
        // 左クリックした時
        if(Input.GetMouseButtonDown(0))
        {
            // レイ
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            // レイを飛ばす
            if (Physics.Raycast(ray, out RaycastHit hitInfo, Mathf.Infinity))
            {
                // 親子関係を切る
                point.parent = null;

                // 位置を移動
                point.position = hitInfo.point;

                // 法線方向を向かせる
                point.forward = hitInfo.normal;
                //point.rotation = Quaternion.FromToRotation(point.forward,hitInfo.normal) * point.rotation;

                // レイが当たったものを親にする
                point.parent = hitInfo.collider.transform;
            }

        }

        // エフェクトの位置を設定
        vfx.SetVector3("Pos", point.position);

        // エフェクトの速度を設定
        vfx.SetVector3("Dir", point.forward);
    }


}

これで、動くオブジェクトの同じ場所からエフェクトを出し続けることができました。

コメントを残す

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