在做一款挂机类游戏的时候,打算给地图怪物做一个被击败动画,我就在击败怪物的回调里面加了一个动画,但是无论如何都没办法正常的播放。
Lua
if humanoid then
-- 创建一个 Animation 实例并设置动画 ID
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://139676583914998"
-- 加载动画到 humanoid
local animTrack = humanoid:LoadAnimation(animation)
-- 播放动画
animTrack:Play()
-- 设置动画结束时的回调函数
animTrack.Ended:Connect(function()
print("动画播放完毕!")
end)
else
warn("模型中没有 Humanoid 实例!")
end
代码很正常也很简单,应该不会有什么逻辑错误,打印的信息也能正常触发,然后我把模型和动画都拖到了另一个场景里就可以正常用,所以并不是模型的问题,
由于这个项目我并没有从头开始跟,我也并不知道之前的程序在播放动画时进行了什么设置,后来在对比两个场景的模型时候发现,这个怪物模型一直在做一个休闲动画,貌似就是这个休闲动画顶替掉了我的死亡动画,于是我把这个动画的优先级 调到了最高,就可以正常播放了
Lua
animTrack.Priority = Enum.AnimationPriority.Action -- 设置为最高优先级
animTrack:Play()
顺嘴一提,
Roblox 的动画优先级分为四个级别,从低到高分别是:
-
Core(核心)
- 用于核心动作,例如角色的基础移动和默认动画(站立、行走、跳跃等)。
- 优先级最低,通常用于覆盖默认动画。
- 适用场景:系统级别的基础动画。
-
Idle(静止)
- 用于站立或其他不活动状态下的动画。
- 比
Core
优先级高,但仍然容易被其他更高优先级的动画覆盖。 - 适用场景:定制角色的站立、休息等动画。
-
Movement
(移动)- 用于移动相关的动画,例如跑步、跳跃、游泳等。
- 比
Idle
和Core
优先级高,但仍可能被Action
动画覆盖。 - 适用场景:角色移动、跑步等场景的动画。
-
Action
(动作)- 优先级最高的动画类型,用于需要覆盖所有其他动画的场景。
- 适用场景:攻击、挥剑、跳跃攻击、特殊技能等需要显著表现的动画。
所以当你的动画明明进入回调了,但是却无法播放,可以先去看一看播放动画的优先级,有没有被其他动画所覆盖,需要注意的是,如果两个动画的优先级相同,那它们就会同时影响部件,使得动作看起来非常奇怪,所以还是尽量明确每个动画的用途以及播放时间,避免多个动画同时控制一个部件。