Unity VFX粒子系统入门笔记-3-使用C#脚本访问VEG蓝图 ...
原视频教程连接:Unity3d Visual Effect Graph Essentials - YouTubeVisual 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)更多知识可以参考这篇文章,总之,我们只需知道此节点会将所有粒子往某一个区域拉扯,当该区域很小的时候,则可以视作一个点。
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(&#34;Destination&#34;,_controller.transform.position);
}
}
脚本建立完成后,将此脚本挂载到该粒子组件所属的GameObject下。在场景中新建一个sphere,并将此sphere赋值给自定义脚本中的_controller变量(直接拖到脚本的对应位置即可)。至此,我们已经完成了使用脚本访问VFX蓝图中的变量。
点击运行按钮,在场景中拖动球体,喷口方向会跟随球体的方向移动,但是若拖动喷口特效这个GameObject,则喷口方向不会改变,原因是我们在SDF组件中使用了相对坐标,在组件中标识为L,若点击以下,则会变为W,即世界坐标。当切换为W后再运行,就可以当移动粒子组件本身时,其喷口方向始终朝着我们的球体方向。不过我们并不需要这样,再次将其切换为L。
5.加个模型看看效果
随便从网上找了一个战斗机模型,放上去试试效果,感觉还行。
(此文章同步发布于CSDN和知乎)
参考
[*]^有向距场https://zhuanlan.zhihu.com/p/337944099
牛逼
页:
[1]