使用动画

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

一旦你创建了动画,你需要使用脚本将它们包含在体验中。你可以手动从脚本中播放动画或替换默认动画给玩家角色。

从脚本中播放动画

在一些情况下,您需要直接从脚本内播放动画,例如当用户按下特定键或捡起特殊物品时。

人形怪物

要在包含 Humanoid 对象的装备上播放动画,例如典型可玩角色,请遵循这个基本模式:

  1. 确保本地玩家的 Humanoid 包含一个 Animator 对象。
  2. 创建一个新的 Animation 实例,使用正确的 AnimationId
  3. 通过 Animator:LoadAnimation() 加载动画来创建 AnimationTrack
  4. 播放轨道与 AnimationTrack:Play()

例如,以下 LocalScript , 放置在 StarterPlayerScripts 时,将“踢”动画加载到玩家角色并播放。该脚本还使用 GetMarkerReachedSignal() 方法检测特定 动画事件 发生时。

本地脚本 - 在玩家角色上播放自定义动画

local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
-- 确保角色的人形包含一个“动画师”对象
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
-- 创建一个新的“动画”实例并分配一个动画资产ID
local kickAnimation = Instance.new("Animation")
kickAnimation.AnimationId = "rbxassetid://2515090838"
-- 将动画加载到动画师
local kickAnimationTrack = animator:LoadAnimation(kickAnimation)
-- 播放动画轨道
kickAnimationTrack:Play()
-- 如果动画定义了命名事件,将其连接到“GetMarkerReachedSignal()”
kickAnimationTrack:GetMarkerReachedSignal("KickEnd"):Connect(function(paramString)
print(paramString)
end)

非人形怪物

要在不包含 的设备上播放动画,你必须创建一个含有子设备 的 。例如,以下 Script (假设是骨架的直接子女) 加载一个 "kic踢出" 动画并播放它。

脚本 - 在角色骨架上播放自定义动画

local rig = script.Parent
-- 创建一个新的“动画”实例并分配一个动画资产ID
local kickAnimation = Instance.new("Animation")
kickAnimation.AnimationId = "rbxassetid://2515090838"
-- 创建新的“动画控制器”和“动画师”
local animationController = Instance.new("AnimationController")
animationController.Parent = rig
local animator = Instance.new("Animator")
animator.Parent = animationController
-- 将动画加载到动画师
local kickAnimationTrack = animator:LoadAnimation(kickAnimation)
-- 播放动画轨道
kickAnimationTrack:Play()
-- 如果动画定义了命名事件,将其连接到“GetMarkerReachedSignal()”
kickAnimationTrack:GetMarkerReachedSignal("KickEnd"):Connect(function(paramString)
print(paramString)
end)

替换默认动画

默认情况下,Roblox 玩家角色包括跑步、攀爬、游泳和跳跃等常见动画。您可以用 目录 中的动画或自己的 自定义 动画替换这些默认动画。

  1. 获取新动画的 资产ID 如下:

  2. 浏览器 窗口中,添加一个新的 ScriptServerScriptService

    1. 将鼠标悬停在 ServerScriptService 上,然后单击 ⊕ 按钮。
    2. 从上下文菜单中插入 脚本
  3. 在新脚本中,粘贴以下验证码:

    脚本 - 替换默认角色动画

    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    -- 在人形上获得动画师
    local humanoid = character:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    -- 停止所有动画轨道
    for _, playingTrack in animator:GetPlayingAnimationTracks() do
    playingTrack:Stop(0)
    end
    local animateScript = character:WaitForChild("Animate")
    --animateScript.run.奔跑unAnim.AnimationId = "rbxassetid://"
    --动画脚本.行走路.走动动画.动画Id = "rbxassetid://"
    --跳动脚本。跳跃动画。动画ID = "rbxassetid://"
    --animateScript.闲置dle.Animation1.AnimationId = "rbxassetid://"
    --animateScript.闲置dle.Animation2.AnimationId = "rbxassetid://"
    --动画脚本.下落all.FallAnim.AnimationId = "rbxassetid://"
    --动画脚本.游泳im.Swim.AnimationId = "rbxassetid://"
    --动画脚本.swimidle.SwimIdle.AnimationId = "rbxassetid://"
    --动画脚本.攀爬limb.ClimbAnim.AnimationId = "rbxassetid://"
    end
    local function onPlayerAdded(player)
    player.CharacterAppearanceLoaded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)
  4. 对于每行引用默认角色动画的 线,请取消评论并在 后粘贴替换 ID 。例如,要将默认运行动画更改为 忍者跑 变体:

    脚本 - 替换默认角色动画

    local Players = game:GetService("Players")
    local function onCharacterAdded(character)
    -- 在人形上获得动画师
    local humanoid = character:WaitForChild("Humanoid")
    local animator = humanoid:WaitForChild("Animator")
    -- 停止所有动画轨道
    for _, playingTrack in animator:GetPlayingAnimationTracks() do
    playingTrack:Stop(0)
    end
    local animateScript = character:WaitForChild("Animate")
    animateScript.run.RunAnim.AnimationId = "rbxassetid://656118852"
    --动画脚本.行走路.走动动画.动画Id = "rbxassetid://"
    --跳动脚本。跳跃动画。动画ID = "rbxassetid://"
    --animateScript.闲置dle.Animation1.AnimationId = "rbxassetid://"
    --animateScript.闲置dle.Animation2.AnimationId = "rbxassetid://"
    --动画脚本.下落all.FallAnim.AnimationId = "rbxassetid://"
    --动画脚本.游泳im.Swim.AnimationId = "rbxassetid://"
    --动画脚本.swimidle.SwimIdle.AnimationId = "rbxassetid://"
    --动画脚本.攀爬limb.ClimbAnim.AnimationId = "rbxassetid://"
    end
    local function onPlayerAdded(player)
    player.CharacterAppearanceLoaded:Connect(onCharacterAdded)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

设置动画重量

您可以使用多个动画来执行相同的操动作。例如,代码示例中有两个 变化,用于替换默认动画 》。

当一个角色状态存在多个动画时, 动画 脚本随机选择播游玩哪一个,但您可以通过设置动画的 Weight 值来影响结果:

  • 动画重量 / 所有状态动画的总重量 在以下示例中,idle.Animation1 将播放角色空闲置时间的三分之一,而 idle.Animation2 将播放三分之二的时间。
脚本 - 替换默认角色动画

animateScript.idle.Animation1.AnimationId = "rbxassetid://656117400"
animateScript.idle.Animation2.AnimationId = "rbxassetid://656118341"
animateScript.idle.Animation1.Weight.Value = 5
animateScript.idle.Animation2.Weight.Value = 10

动画参考

默认角色动画

下表包含所有默认角色动画,您可以用 目录 动画或自己的 自定义 动画替换。请注意, 空闲 有两种变化,你可以权衡播放更多或更少频率。

角色行动作动画脚本参考
运行 animateScript.run.RunAnim.AnimationId
步行 animateScript.walk.WalkAnim.AnimationId
animateScript.jump.JumpAnim.AnimationId
空闲

animateScript.idle.Animation1.AnimationId animateScript.idle.Animation2.AnimationId

下降 animateScript.fall.FallAnim.AnimationId
游泳

animateScript.swim.Swim.AnimationId

游泳(空闲)

animateScript.swimidle.SwimIdle.AnimationId

攀登 animateScript.climb.ClimbAnim.AnimationId

目录动画

当使用虚拟形象动画包来 替换默认动画 时,使用以下参考以获取各个资产ID。例如,如果你想应用忍者跳跃动画,使用656117878。请注意, 空闲 有多种变化。

宇航员
运行 891636393
行走 891636393
跳跃 891627522
空闲 891621366, 891633237, 1047759695
空闲 (Idle) 891617966, 891633237, 1047759695
游泳 891639666
游泳 (空闲) 891663592
泡泡
运行 910025107
步行 910034870
跳跃 910016857
空闲 910004836, 910009958, 1018536639
下降 (空闲) 910001910
游泳 (空闲) 910028158
游泳 (空闲) 910030921
卡通
运行 742638842
行走 742640026
跳跃 742637942
空闲 742637544, 742638445, 885477856
空闲 (Idle) 742637151
游泳 (空闲) 742639220
游泳 (空闲) 742636889
长老
运行 845386501
行走 845403856
跳跃 845398858
空闲 845397899, 845400520, 901160519
空闲 (Idle) 845396048
游泳 (空闲) 845401742
游泳 (空闲) 845392038
骑士
运行 657564596
行走 657552124
跳跃 658409194
空闲 657595757, 657568135, 885499184
空闲 (Idle) 657600338, 657568135, 885499184
游泳 657560551
游泳 (空闲) 657557095
悬浮
运行 616010382
行走 616013216
跳跃 616008936
空闲 616006778, 616008087, 886862142
空闲 (Idle) 616005863
游泳 (空闲) 616011509
游泳 (空闲) 616003713
魔法师
运行 707861613
行走 707897309
跳跃 707853694
空闲 707742142, 707855907, 885508740
空闲 (Idle) 707829716
游泳 (空闲) 707894699
游泳 (空闲) 707826056
忍者
运行 656118852
走路 656121766
跳跃 656117878
空闲 656117400, 656118341, 886742569
空闲 (Idle) 656115606, 656118341, 886742569
游泳 656119721
游泳 (空闲) 656121397
海盗
运行 750783738
行走 750785693
跳跃 750782230
空闲 750781874, 750782770, 885515365
空闲 (Idle) 750780242, 750782770, 885515365
游泳 750784579
游泳 (空闲) 750785176
机器人
运行 616091570
行走 616095330
跳跃 616088211, 616089559, 885531463
空闲 616088211, 616089559, 885531463
空闲 (Idle) 616087089, 616089559, 885531463
游泳 616092991
游泳 (空闲) 616086039
Rthro
运行 2510198475
行走 2510202577
跳跃 2510197830
空闲 2510197257, 2510196951, 3711062489
空闲 (Idle) 2510195892
游泳 (空闲) 2510201162
游泳 (空闲) 2510192778
时髦
运行 616140816
行走 616146177
跳跃 616139451
空闲 616136790, 616138447, 886888594
空闲 (Idle) 616134815
游泳 (空闲) 616143378
游泳 (空闲) 616144772
超级英雄
运行 616117076
行走 616122287
跳跃 616115533
空闲 616111295, 616113536, 885535855
空闲 (Idle) 616108001, 616113536, 885535855
游泳 616119360
游泳 (空闲) 616120861
玩具
运行 782842708
行走 782843345
跳跃 782847020
空闲 782841498, 782845736, 980952228
下降 (空闲) 782846423
游泳 (空闲) 782844582
游泳 (空闲) 782845186
吸血鬼
运行 1083462077
行走 1083473930
跳跃 1083455352
空闲 1083445855, 1083450166, 1088037547
空闲 (Idle) 1083443587
游泳 (空闲) 1083464683
游泳 (空闲) 1083467779
狼人
运行 1083216690
行走 1083178339
跳跃 1083218792
空闲 1083195517, 1083214717, 1099492820
空闲 (Idle) 1083222527
游泳 (空闲) 1083225406
游泳 (空闲) 1083182000
僵尸
运行 616163682
步行 616168032
跳跃 616161997
空闲 616158929, 616160636, 885545458
游泳 (空闲) 616157476
步行 (空闲) 616165109
游泳 (空闲) 616166655