用Niagara的Ribbon绘制样条线

最近由于项目需要用到鼠标在场景利绘制曲线,方案有很多,比如SplineMesh,ProceduralMesh 等等,回头一想用特效也可以试试

本案例使用虚幻4.22版本演示

用Niagara的Ribbon绘制样条线的功能

模块函数 NiagaraModuleScript
  • 模块函数是Niagara系统的函数库,是niagara系统最主要区别于老例子系统的其中一点

创建函数库 NM_Test1

完成如上节点连接

注意:变量的前缀是对应模块,这个不能随意更改,创建的时候就选好模块会自动添加前缀;如果是系统已有变量,就不需要自己更改名称,如Emitter.age,表示发射器的生命周期

  • User.SP:User分类下的Spline变量,本案例用下面参数代替
  • Module.Count:函数输入参数,本函数中用于控制发射数量
  • SampleSplinePositionByUnitDistanceWS:输入0-1输出曲线从开始到结束的世界空间位置
  • ExecutionIndex:当前粒子的序号

简单描述这个函数的功能就是根据发射粒子在所有发射粒子中的百分比对应到曲线spline的长度百分比

粒子发射器 Emitter

随意创建一个发射器,删除多余节点,配置图所示

刚开始比较容易混淆的概念是 Emitter的spawn,update与Particle的Spawn,Update的概念

  • Emitter针对的就是整个发射器的操作,约等于老系统的Required和部分Spawn的内容,如整个发射器的生命周期,是否循环
  • Particle控制每个粒子的属性和功能,如每个粒子的大小颜色等
  • 不恰当的比喻就是Emitter就是Actor,Particle就是Component

图中关键节点解释

  • 创建3个User变量,User变量可以到外部设置
  • 创建Emitter模块的Emitter.SpawnCount变量,暴力一点可以直接跳过直接用User的
  • 发射器创建的时候用User.SpawnCount设置Emitter.SpawnCount
  • Emitter.SpawnCount去设置SpawnBurstInstaneous的发射数量
  • 修改Render模块中的粒子类型为Ribbon
  • 设置Ribbon的宽度
  • 在Spawn(在Update也可以) 中加上自定义的函数NM_Test1,并把EmitterSpawnCount设置为输入参数
粒子系统 NiagaraSystem

汇总所有Emitter的集合,同时可以实例化到场景或者类里的类;同时也可以再次修改Emitter中所有参数

如图所示,可以使用多个发射器,可以设置User模块的参数,可以拖拽不同发射器的作用时间(类似动画)

本案例中只需要添加一个发射器

画线类 DrawItem

  • 目前版本貌似没有更直观的方法设置Spline变量,强行用设置Actor变量尽然是可以的(lll¬ω¬)

  • 提供对外函数AddPoint(FVector)用于添加曲线点

PlayerController

不要忘记开启项目设置里Input模块下的UseMouseForTouch

蓝图比较简单,简单描述就是在鼠标按下移动后用射线点通过DrawItem添加曲线点

总结
  1. 用Niagara类绘制曲线模型算是比较简单方便的,Niagara在性能优化上也不错
  2. 曲线在长度到一定程度后会有明显分段情况出现,不够圆滑,目前版本没有公开Ribbon的设置段数的变量
  3. 据说Niagara在4.25才是正式版,目前无法保证bug问题