找回密码
 立即注册
查看: 364|回复: 1

[简易教程] Unity VFX粒子系统入门笔记-3-使用C#脚本访问VEG蓝图 ...

[复制链接]
发表于 2022-3-26 21:22 | 显示全部楼层 |阅读模式
原视频教程连接:Unity3d Visual Effect Graph Essentials - YouTube

Visual Effect Graph 是一个可用于为 Unity 项目创建大规模视觉效果的包。Visual Effect Graph 利用 GPU 模拟粒子行为,可模拟的粒子数量远远超过内置粒子系统。本帖子作为本人先前的VFX学习记录,将会逐渐整理出来。
<hr/>之前照着教程做的一个喷口特效,放在战斗机尾部感觉还蛮有意思,非常简单,顺便讲解以下如何使用脚本访问VEG蓝图中的变量。
最终效果:





蓝图节点:







<hr/>1.Update阶段

添加SetPosition(Arc Torus)组件,该组件会将粒子初始化到一个圆环形状上;Major Radius控制圆环整体的半径大小,Minor Radius控制圆环截面的半径大小,Arc控制圆环的完整度,单位为弧度,例如若取3.14,则圆环只有一半会出现。




2.Update阶段

添加Conform to Signed Distance Field,该节点会对所有粒子统一施加一个向某一区域的力,区域的位置由Field Transform中的参数所决定。关于Signed Distance Field(有向距离场SDF)更多知识可以参考这篇文章[1],总之,我们只需知道此节点会将所有粒子往某一个区域拉扯,当该区域很小的时候,则可以视作一个点。
Attraction Speed:粒子在力的作用下能达到的最大速度。
Attraction Force:力的大小,决定粒子加速度的大小,即达到最大速度所需时间。
Stick Distance:距离SDF多远的距离才开始让Stick Force生效。
Stick Force:把粒子固定在SDF中的力的大小,翻译成人话就是,当粒子到达上面指定的区域后,该区域会产生多大的力把粒子留在这里。




调整参数,让粒子的移动轨迹如火焰喷口一般。(具体参数请直接参考最上方的蓝图)



3.OutPut输出阶段

使用Mesh和Quad输出均可,这里因为没有合适的平面素材,我就直接用方形网格来代替,显得体积感足一点。在输出阶段主要调整以下三个Block,具体size和gradient color可凭自己喜好来设置。到这一步,整体造型已经差不多,接下来就是用C#脚本来控制喷口的方向




4.使用C#脚本对喷口方向进行控制

喷口的方向本质上是由Update节点中的SDF Center在决定,对每一个粒子施加力的方向也是指向了该position。在变量管理窗口中点击加号,新建一个Vector 3变量,并将该变量拖到蓝图中,复制给Update阶段的Conform to Signed Distance Field-->Field Transform -->Center,同时需保证该变量的Exposed被勾选上了,这样才能在脚本中对该变量进行访问。




新建一个C#脚本,在头部声明使用UnityEngine.VFX,在类中建立两个变量,一个GameObject类型,一个VisualEffect类型,第一个变量我们将会取其tranform中的position,第二个变量将会访问我们的粒子组件,最后将position赋值给上一步蓝图中新建的Destination变量即可,赋值方式和访问着色器的语法基本一致。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.VFX;

public class FireDir : MonoBehaviour
{
    public GameObject _controller;
    private VisualEffect _visualEffect;

    // Start is called before the first frame update
    void Start()
    {
        _visualEffect = GetComponent<VisualEffect>();
    }

    // Update is called once per frame
    void Update()
    {
        _visualEffect.SetVector3("Destination",_controller.transform.position);
    }
}
脚本建立完成后,将此脚本挂载到该粒子组件所属的GameObject下。在场景中新建一个sphere,并将此sphere赋值给自定义脚本中的_controller变量(直接拖到脚本的对应位置即可)。至此,我们已经完成了使用脚本访问VFX蓝图中的变量。


点击运行按钮,在场景中拖动球体,喷口方向会跟随球体的方向移动,但是若拖动喷口特效这个GameObject,则喷口方向不会改变,原因是我们在SDF组件中使用了相对坐标,在组件中标识为L,若点击以下,则会变为W,即世界坐标。当切换为W后再运行,就可以当移动粒子组件本身时,其喷口方向始终朝着我们的球体方向。不过我们并不需要这样,再次将其切换为L。




5.加个模型看看效果

随便从网上找了一个战斗机模型,放上去试试效果,感觉还行。


(此文章同步发布于CSDN和知乎)
参考


  • ^有向距场https://zhuanlan.zhihu.com/p/337944099

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2022-3-26 21:24 | 显示全部楼层
牛逼
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-7 19:55 , Processed in 0.094261 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表