Godot游戏练习01-第13节-粒子系统,武器攻击特效

上一次增加了武器的动画, 今天继续进行视觉优化, 加入攻击的粒子特效, 让开火更有感觉!

看看效果

特效粒子效果

游戏中的效果

实现过程

粒子特效实现

绘制需要使用的几个随机粒子纹理

随便画一下就行, 保持颜色为白色, 方便后期颜色加工

在Godot中创建GPUParticals2D场景, 命名为muzzle_flash_effect.tscn

  1. 新建的粒子系统, 什么都不显示, 先在Process Material中添加一个Partical Process Material, 就可以看到基本的粒子效果
  2. 设置Texture, 更改默认纹理
  3. 在CanvasItem的Material中新增一个CanvasItemMaterial, 并打开Particals Animation选项, 调整横向帧为4, 就可以逐帧使用纹理

后续过程基本是逐步调整粒子系统的各类参数, 达到自己想要的效果, 步骤比较繁琐, 截图截不动了, 说一下大概思路

  • 生成初始速度调整, 关闭重力, 向右生成, 带一点explosion的爆发效果
  • 减少粒子生命到0.2, 生成数量5左右
  • 调整缩放曲线, 出生时快速放大, 结束时快速减小
  • 调整颜色, 随机黄-橙-白, 等比例随机
  • 调整阻尼(Damping), 值设置为固定800左右, 让粒子一开始爆发出来, 之后迅速减速 (烟雾效果)
  • 随机出生旋转, 随机纹理(Display - Animation - Offset)
  • 打开一次性生成(OneShot)

最后添加了一个AnimationPlayer, 这里其实有点炫技, 没有使用脚本实现了特效的自动播放和自动释放

  • 添加默认动画default, 在第一帧设置Emitting为true
  • 添加Call Function轨道, 在0.5秒之后设置key, 调用根节点的queue_free函数

粒子同步

粒子的同步生成对我们来说已经比较简单

在之前的play_attack_effect的rpc调用中, 在所有peer上创建粒子特效即可, 处理好位置和方向, 不同的peer的特效显示不需要完全一样

gdscript 复制代码
@rpc("authority", "call_local", "unreliable")
func _play_attack_effect() -> void:
	if animation_player.is_playing():
		animation_player.stop()
	animation_player.play("attack")
	var effect: Node2D = MUZZLE_FLASH_EFFECT.instantiate()
	effect.global_position = attack_point.global_position
	effect.global_rotation = attack_point.global_rotation
	get_parent().add_child(effect)

其中attack_point是添加在枪口位置的一个Marker2D, 用于标记特效和子弹的生成位置, 将子弹的初始位置也修改为Marker2D的位置

相关推荐
魔士于安2 天前
unity 丑陋哥布林 哥布林有humannoid 动画没 带动画
unity·游戏引擎·材质·贴图·模型
JQweryuiop2 天前
中小型游戏陪练工作室数字化管理实践:基于七彩屋电竞护航小程序订单、履约与绩效系统的落地复盘
大数据·游戏·小程序·架构
淡海水2 天前
13-04-面试-源码级深度追问链
数据结构·unity·面试·c#·游戏引擎·源码·il2cpp
乌萨达3 天前
低配电脑玩手游怎么设置?4GB、8GB内存与模拟器选择指南
游戏·电脑·安卓模拟器·雷电模拟器
小小数媒成员3 天前
UGUI 性能优化(详细,全,深入)
开发语言·unity·游戏引擎
goujunwe4 天前
GEO 评估方法:如何自测你的内容,会不会被 AI 引用
搜索引擎·网络安全·游戏引擎·全文检索·中文分词
林川~014 天前
Unity 万能物理检测工具:射线检测 / 范围检测 / 层级过滤 / 编辑器可视化(可直接拿去用)
游戏·unity·c#·射线检测·通用工具
林川~015 天前
Unity 常用 API 与核心类全解:从生命周期到协程,附性能避坑清单(Unity 6 适配)
unity·游戏引擎·常用api
一孤程5 天前
游戏测试专题第七篇:游戏自动化测试实战
游戏·测试
一孤程5 天前
游戏测试专题第八篇:游戏安全测试与反外挂
游戏·测试