子弹轨迹特效
2023年10月17日 2024年1月11日
说明
子弹在空间中的轨迹
图示只做说明
修正枪口特效
NE_LauncherFlash
-
火花样式
弹射旋转Sprite Rotation
调整
Scale Sprite Size
和Sprite Rotation Rate
顺序, 设置旋转比例范围 -
解决神龙甩尾效果
-
减小火花
修正榴弹冲击特效
NS_ProjectileImpact
SimpleSpriteBurst
腾云特效
-
设置时长
-
粒子数
-
生存时间和大小
-
分布属性
添加设置半径和原型
-
排序
UpwardMeshBurst
箭簇特效
-
粒子数
-
生存期, 颜色, 体积等
-
取消模块勾选
-
大小分布
-
移除不需要的网格体等
OmnidirectionalBurst
击碎雪球特效
-
添加属性
-
调整属性位置, 设置圆形分布半径等
-
排序
实现轨迹特效
创建文件夹 Content/VFX/Trace
, 创建下属文件夹 Projectile
和 Rifle
创建步枪子弹轨迹用粒子发射器
Content/VFX/Trace/Rifle
基于模板Dynamic Beam, 命名为NE_RifleBeam
-
Initialize Particle
-
Beam Width
-
Color
创建步枪子弹轨迹用粒子系统
Content/VFX/Trace/Rifle
使用粒子发射器NE_RifleBeam
命名为NS_RifleBeam
创建榴弹轨迹用粒子发射器
Content/VFX/Trace/Projectile
NE_BlueCore
基于模板SimpleSpriteBurst
-
Properties
-
Emitter State
-
Spawn Burst Instantaneous
-
Initialize Particle
-
Scale Color
-
添加模块
Scale Sprite Size
-
添加模块
Sprite Rotation Rate
-
Sprite Renderer
NE_Electric
基于模板SimpleSpriteBurst
-
Properties
-
Emitter State
-
添加模块:
Spawn Rate
-
Initialize Particle
-
添加模块:
Shape Location
-
Scale Color
-
添加模块:
Scale Sprite Size
-
添加模块:
Sprite Rotation Rate
-
添加模块:
Sub UVAnimation
-
Sprite Renderer
NE_Fountain
基于模板Fountain
-
Spawn Rate
-
Initialize Particle
-
Shape Location
-
Add Velocity
-
Gravity Force
-
添加模块:
Collision
-
添加模块:
Acceleration Force
-
Sprite Renderer
-
添加模块Scale Velocity
-
定位
Add Velocity
模块位置 -
Scale Velocity在库中隐藏
-
拖动
Scale Velocity
到NE_Fountain中, 添加该模块 -
设置
-
NE_Smoke
基于模板Fountain
-
Spawn Rate
-
Initialize Particle
-
Scale Color
X、Y和Z终点Z起点
Y起点
X起点
-
取消未使用模块勾选
-
添加模块:
Scale Sprite Size
起点
终点
-
添加模块:
Sub UVAnimation
-
Sprite Renderer
创建榴弹轨迹用粒子系统
Content/VFX/Trace/Projectile
使用现有发射器
依次选择NE_CoreBlue, NE_Electric, NE_Smoke, NE_Fountain
命名为NS_ProjectileTrace
为轨迹终点绑定变量
Content/VFX/Trace/Rifle/NS_RifleBeam
调试终点
Beam Emitter Setup
设置Beam End > X = 1200, 光束更长; 绘制轨迹时, 对该参数进行设置
不使用相对座标, 而是世界座标
勾选 Absolute Beam End
绑定变量
NS_RifleBeam
添加变量, 设置变量类型为Vector
Parameters > User Exposed
命名为TraceTarget
为Beam End绑定变量TraceTarget
NE_RifleBeam > Beam Emitter Setup > Beam End
设置特效只播放一次
NS_RifleBeam > NE_RifleBeam > Emitter State > Loop Behavior
在C++中为步枪子弹生成轨迹特效
生成轨迹特效, 设置TraceTarget变量
添加变量: 保存轨迹特效类型
ShootThemUp: Weapon/STURifleWeapon.h
protected
1class UNiagaraSystem; 2 3UPROPERTY(EditDefaultsOnly, BlueprintRead 4 Write) 5UNiagaraSystem *TraceFX;
添加变量: 存放轨迹终点变量名
ShootThemUp: Weapon/STURifleWeapon.h
protected
1UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) 2FString TraceTargetName = "TraceTarget";
添加函数: 绘制轨迹特效
ShootThemUp: Weapon/STURifleWeapon.h
private
1void SpawnTraceFX(const FVector &TraceStart, const FVector &TraceEnd);
射击时调用
- 之前有绘制轨迹示意图, 屏蔽未射中分支
- 若击中, 更新终点
- 生成轨迹特效
ShootThemUp: Weapon/STURifleWeapon.cpp
1// MakeShot 2 3FVector TraceFXEnd = TraceEnd; 4if (HitResult.bBlockingHit) 5{ 6 TraceFXEnd = HitResult.ImpactPoint; 7 // ... 8} 9SpawnTraceFX(GetMuzzleWorldLocation(), TraceFXEnd);
实现
1#include "NiagaraFunctionLibrary.h" 2 3void ASTURifleWeapon::SpawnTraceFX(const FVector &TraceStart, const FVector &TraceEnd) 4{ 5 const auto TraceFXComponent = UNiagaraFunctionLibrary::SpawnSystemAtLocation(GetWorld(), TraceFX, TraceStart); 6 if (TraceFXComponent) 7 { 8 TraceFXComponent->SetNiagaraVariableVec3(TraceTargetName, TraceEnd); 9 } 10}
查看步枪子弹轨迹
BP_STURifleWeapon
设置特效类
为榴弹添加轨迹特效
BP_STUProjectile
为其添加Niagara Particle System组件
命名为TraceFXComponent, 为其设置粒子系统
关闭特效渲染
BP_STUProjectile
TraceFXComponent > Details > Rendering > Visible
, 取消勾选
使用发光材质
创建材质实例
拷贝MI_BlueGlow Ctrl-D
, 命名为MI_ProjectileGlow
设置颜色Hex Linear = 006AE100
设置发光参数为500
使用材质实例
BP_STUProjectile
为静态网格体应用材质MI_ProjectileGlow
添加点光源组件
Point Light
设置颜色Hex Linear = 006AE100
Details > Light > Light Color
恢复特效渲染
遗留问题
榴弹爆炸时, 烟雾和其他特效一起消散. 一个更好的做法, 其他特效消散, 保留烟雾效果. 比如, 设置榴弹延后销毁