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不可靠, 比如丢包, 这只是一个效果显示, 不重要
相关推荐
RPGMZ4 小时前
RPGMakerMZ 获取敌人攻击时属性 用于画UI或属性克制
javascript·游戏引擎·rpgmz·rpgmakermz
Lanren的编程日记4 小时前
Flutter 鸿蒙应用游戏化元素实战:积分等级+成就解锁+排行榜,全方位提升用户粘性
flutter·游戏·华为·harmonyos
zdr尽职尽责4 小时前
Untiy 处理Aseprite 资产 解决偏移问题
学习·unity·c#·游戏引擎
LcGero5 小时前
游戏引擎Luanti的前世今生与技术解析
游戏引擎·lua·游戏开发·我的世界·luanti
郝学胜-神的一滴6 小时前
[简化版 GAMES 101] 计算机图形学 06:相机视图矩阵的由来
c++·线性代数·unity·矩阵·godot·图形渲染·unreal engine
superior tigre1 天前
45 跳跃游戏2
算法·leetcode·游戏
CyL_Cly1 天前
杀戮尖塔2mod:二次元猎宝
windows·游戏
cxr8281 天前
从细胞到蜂群:基于康威生命游戏原理的多智能体编排
游戏
小辉同志1 天前
45. 跳跃游戏 II
c++·leetcode·游戏·贪心算法
开开心心就好1 天前
避免借电脑尴尬的故障模拟工具
科技·游戏·visualstudio·edge·pdf·电脑·powerpoint