一旦你创建了动画,你需要使用脚本将它们包含在体验中。你可以手动从脚本中播放动画或替换默认动画给玩家角色。
从脚本中播放动画
在一些情况下,您需要直接从脚本内播放动画,例如当用户按下特定键或捡起特殊物品时。
人形怪物
要在包含 Humanoid 对象的装备上播放动画,例如典型可玩角色,请遵循这个基本模式:
- 创建一个新的 Animation 实例,使用正确的 AnimationId 。
- 通过 Animator:LoadAnimation() 加载动画来创建 AnimationTrack 。
- 播放轨道与 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 玩家角色包括跑步、攀爬、游泳和跳跃等常见动画。您可以用 目录 中的动画或自己的 自定义 动画替换这些默认动画。
在新脚本中,粘贴以下验证码:
脚本 - 替换默认角色动画local Players = game:GetService("Players")local function onCharacterAdded(character)-- 在人形上获得动画师local humanoid = character:WaitForChild("Humanoid")local animator = humanoid:WaitForChild("Animator")-- 停止所有动画轨道for _, playingTrack in animator:GetPlayingAnimationTracks() doplayingTrack:Stop(0)endlocal 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://"endlocal function onPlayerAdded(player)player.CharacterAppearanceLoaded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)对于每行引用默认角色动画的 线,请取消评论并在 后粘贴替换 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() doplayingTrack:Stop(0)endlocal 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://"endlocal function onPlayerAdded(player)player.CharacterAppearanceLoaded:Connect(onCharacterAdded)endPlayers.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 = 5animateScript.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 |