六一的部落格


关关难过关关过,前路漫漫亦灿灿。




说明

子弹在空间中的轨迹

图示只做说明


修正枪口特效

NE_LauncherFlash

  • 火花样式

    弹射旋转 Sprite Rotation


    调整 Scale Sprite SizeSprite Rotation Rate 顺序, 设置旋转比例范围


  • 解决神龙甩尾效果


  • 减小火花



修正榴弹冲击特效

NS_ProjectileImpact


SimpleSpriteBurst

腾云特效

  • 设置时长


  • 粒子数


  • 生存时间和大小


  • 分布属性

    添加


    设置半径和原型


  • 排序



UpwardMeshBurst

箭簇特效

  • 粒子数


  • 生存期, 颜色, 体积等


  • 取消模块勾选


  • 大小分布


  • 移除不需要的网格体等



OmnidirectionalBurst

击碎雪球特效

  • 添加属性


  • 调整属性位置, 设置圆形分布半径等


  • 排序



实现轨迹特效

创建文件夹 Content/VFX/Trace , 创建下属文件夹 ProjectileRifle


创建步枪子弹轨迹用粒子发射器

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



恢复特效渲染


遗留问题

榴弹爆炸时, 烟雾和其他特效一起消散. 一个更好的做法, 其他特效消散, 保留烟雾效果. 比如, 设置榴弹延后销毁


子弹轨迹特效



说明

子弹在空间中的轨迹

图示只做说明


修正枪口特效

NE_LauncherFlash

  • 火花样式

    弹射旋转 Sprite Rotation


    调整 Scale Sprite SizeSprite Rotation Rate 顺序, 设置旋转比例范围


  • 解决神龙甩尾效果


  • 减小火花



修正榴弹冲击特效

NS_ProjectileImpact


SimpleSpriteBurst

腾云特效

  • 设置时长


  • 粒子数


  • 生存时间和大小


  • 分布属性

    添加


    设置半径和原型


  • 排序



UpwardMeshBurst

箭簇特效

  • 粒子数


  • 生存期, 颜色, 体积等


  • 取消模块勾选


  • 大小分布


  • 移除不需要的网格体等



OmnidirectionalBurst

击碎雪球特效

  • 添加属性


  • 调整属性位置, 设置圆形分布半径等


  • 排序



实现轨迹特效

创建文件夹 Content/VFX/Trace , 创建下属文件夹 ProjectileRifle


创建步枪子弹轨迹用粒子发射器

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



恢复特效渲染


遗留问题

榴弹爆炸时, 烟雾和其他特效一起消散. 一个更好的做法, 其他特效消散, 保留烟雾效果. 比如, 设置榴弹延后销毁