Godot游戏练习01-第12节-添加武器动画,同步动画显示

今天来增加一点动画, 让游戏看起来更生动一些, 顺便学习处理动画在多人游戏中的同步展示

看看效果

实现思路

武器动画实现

在WeaponRoot与武器的Sprite2D中间再新增一个WeaponAnimaionRoot的Node2D中间节点, 动画将基于该节点属性制作, 而不直接作用于底层的Sprite2D, 方便以后更换武器时可以复用

新增AnimationPlayer节点, 并新建一个attack动画

在动画轨道中添加WeaponAnimaionRoot的scale与rotation属性, 动画时长0.15秒, 每0.05秒一个动画帧

  • scale: (1.0, 1.0) -> (0.7, 1.5) -> (1.2, 0.7) -> (1.0, 1.0)
  • rotation: (0.0, 0.0) -> (-15.0, 0.0) -> (0.0, 0.0)

让武器在攻击时有一点"弹一下"并且具有后坐力的感觉

动画播放与同步

动画的播放调用animation_player.play函数, 动画同步通过RPC, 由服务器同步到所有peer

gdscript 复制代码
func _try_to_attack() -> void:
	if not attack_timer.is_stopped():
		return
    # other codes ...
	_play_attack_effect.rpc()


@rpc("authority", "call_local", "unreliable")
func _play_attack_effect() -> void:
	if animation_player.is_playing():
		animation_player.stop()
	animation_player.play("attack")

rpc的三个参数含义:

  • authority: 仅服务端可调用, 这里服务端是Player节点的authority
  • call_local: 该函数可通过rpc在远端peer与本地peer上运行
  • unreliable: 允许RPC不可靠, 比如丢包, 这只是一个效果显示, 不重要
相关推荐
又过二十3 小时前
结合Godot八向图实现网页角色设计器测试
ai·aigc·godot·game·qwen-image·游戏素材
寂寞的船8 小时前
【Unity知识速递】第8期 IL2CPP 托管堆内存碎片与原生堆交互机制深度解析
unity·游戏引擎·交互
java_logo1 天前
Docker 部署 EmulatorJS:轻松搭建浏览器复古游戏平台
游戏·docker·容器·复古游戏·轩辕镜像·emulatorjs·红白机
淡海水1 天前
09-04-内存-Unity原生对象生命周期
unity·c#·游戏引擎·gc
寂寞的船1 天前
【Unity Bug挑战】第10期 SerializeReference 内存泄漏之谜
unity·c#·游戏引擎·bug
AI小百科2 天前
AI 进游戏:游戏里的 NPC 开始有自己的性格
人工智能·游戏·ai
云-缩影3 天前
文生图技术落地:从广告到游戏,哪些场景真的能用
人工智能·游戏
hkNaruto3 天前
【AI】游戏大模型智能体OODA过程记忆问题解决方案:AgenticSTS 有界记忆契约:技术分析与流水线改造操作手册
人工智能·游戏·机器学习
tealcwu3 天前
【Unity基础】为什么游戏需要物理按键映射?从 Unity Input Manager 到跨引擎输入设计
java·游戏·unity
沐飞工具箱3 天前
游戏、漫画、视频里的外语怎么实时翻译?从 OCR + AI 原理聊聊 VoriTrans 屏幕翻译
人工智能·游戏·实时互动·音视频·自动翻译