Roblox踩坑1——动画无法完整播放

在做一款挂机类游戏的时候,打算给地图怪物做一个被击败动画,我就在击败怪物的回调里面加了一个动画,但是无论如何都没办法正常的播放。

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 的动画优先级分为四个级别,从低到高分别是:

  1. Core(核心)

    • 用于核心动作,例如角色的基础移动和默认动画(站立、行走、跳跃等)。
    • 优先级最低,通常用于覆盖默认动画。
    • 适用场景:系统级别的基础动画。
  2. Idle静止)

    • 用于站立或其他不活动状态下的动画。
    • Core 优先级高,但仍然容易被其他更高优先级的动画覆盖。
    • 适用场景:定制角色的站立、休息等动画。
  3. Movement(移动)

    • 用于移动相关的动画,例如跑步、跳跃、游泳等。
    • IdleCore 优先级高,但仍可能被 Action 动画覆盖。
    • 适用场景:角色移动、跑步等场景的动画。
  4. Action(动作)

    • 优先级最高的动画类型,用于需要覆盖所有其他动画的场景。
    • 适用场景:攻击、挥剑、跳跃攻击、特殊技能等需要显著表现的动画。

所以当你的动画明明进入回调了,但是却无法播放,可以先去看一看播放动画的优先级,有没有被其他动画所覆盖,需要注意的是,如果两个动画的优先级相同,那它们就会同时影响部件,使得动作看起来非常奇怪,所以还是尽量明确每个动画的用途以及播放时间,避免多个动画同时控制一个部件。

相关推荐
呆呆敲代码的小Y1 天前
【游戏开发】Lua 与 C# 交互原理解析
c#·lua·交互·热更新·lua与c#交互·游戏热更新
呆呆敲代码的小Y1 天前
Lua 上值(UpValue)
开发语言·junit·lua·lua上值·upvalue
呆呆敲代码的小Y1 天前
【游戏开发】xLua 性能优化技巧
junit·性能优化·lua·xlua
曼巴UE51 天前
Unlua UE5.3 调试
ue5·lua·unlua
nvd111 天前
实战:用 Lua 手写 Kong 安全鉴权插件并通过 ArgoCD GitOps 零编译部署到 DbGate 服务
安全·lua·kong
攻城有术3 天前
专项攻克——redis分布式锁-用LUA脚本解决setNX锁不释放问题
redis·分布式·lua
肠畔码农9 天前
底层视角拆解:Redis Lua脚本原子性、主线程阻塞与主从不一致全解析
java·redis·lua
小的~~10 天前
面试被问懵了?为什么 Redis 单线程还能保证 Lua 脚本原子性,却偏偏选了 Lua?
redis·面试·lua
難釋懷11 天前
Nginx-Lua
nginx·junit·lua
mCell13 天前
Lua 编程入门:从基础语法到元表
javascript·算法·lua