一旦你創建了一個動畫,你需要使用腳本將其包含在你的遊戲中。你可以從腳本手動播放動畫或替換玩家角色的預設動畫。
從腳本播放動畫
在某些情況下,你需要從腳本內部直接播放動畫,例如當用戶按下某個按鍵或撿起特殊物品時。
人形
要在包含 Humanoid 對象的模型上播放動畫(例如典型的可玩角色),遵循以下基本模式:
- 創建一個新的 Animation 實例,並指定正確的 AnimationId。
- 通過 Animator:LoadAnimation() 加載動畫,以便創建 AnimationTrack。
- 使用 AnimationTrack:Play() 播放該軌道。
例如,以下 LocalScript,當放置在 StarterPlayerScripts 中時,會將 "踢" 動畫加載到玩家角色上並播放。該腳本還利用 GetMarkerReachedSignal() 方法來檢測何時發生特定的動畫事件。
LocalScript - 在玩家角色上播放自定義動畫
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
-- 確保角色的人形包含 "Animator" 對象
local humanoid = character:WaitForChild("Humanoid")
local animator = humanoid:WaitForChild("Animator")
-- 創建一個新的 "Animation" 實例並指定動畫資源 ID
local kickAnimation = Instance.new("Animation")
kickAnimation.AnimationId = "rbxassetid://2515090838"
-- 將動畫加載到動畫器中
local kickAnimationTrack = animator:LoadAnimation(kickAnimation)
-- 如果為動畫定義了命名事件,則將其連接到 "GetMarkerReachedSignal()"
kickAnimationTrack:GetMarkerReachedSignal("KickEnd"):Connect(function(paramString)
print(paramString)
end)
task.wait(4)
-- 播放動畫軌道
kickAnimationTrack:Play()
非人形
要在不包含 Humanoid 的模型上播放動畫,你必須創建一個 AnimationController,並添加一個 Animator。例如,以下 Script(假設為模型的直接子項)會加載 "踢" 動畫並播放它。
Script - 在角色模型上播放自定義動畫
local rig = script.Parent
-- 創建一個新的 "Animation" 實例並指定動畫資源 ID
local kickAnimation = Instance.new("Animation")
kickAnimation.AnimationId = "rbxassetid://2515090838"
-- 創建一個新的 "AnimationController" 和 "Animator"
local animationController = Instance.new("AnimationController")
animationController.Parent = rig
local animator = Instance.new("Animator")
animator.Parent = animationController
-- 將動畫加載到動畫器中
local kickAnimationTrack = animator:LoadAnimation(kickAnimation)
-- 如果為動畫定義了命名事件,則將其連接到 "GetMarkerReachedSignal()"
kickAnimationTrack:GetMarkerReachedSignal("KickEnd"):Connect(function(paramString)
print(paramString)
end)
task.wait(4)
-- 播放動畫軌道
kickAnimationTrack:Play()
替換預設動畫
預設情況下,Roblox 玩家角色包括許多常見動畫,如跑步、攀爬、游泳和跳躍。你可以將這些預設動畫替換為目錄中的動畫或你自己的自定義動畫。
在新腳本中,粘貼以下代碼:
Script - 替換角色預設動畫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://"--animateScript.walk.WalkAnim.AnimationId = "rbxassetid://"--animateScript.jump.JumpAnim.AnimationId = "rbxassetid://"--animateScript.idle.Animation1.AnimationId = "rbxassetid://"--animateScript.idle.Animation2.AnimationId = "rbxassetid://"--animateScript.fall.FallAnim.AnimationId = "rbxassetid://"--animateScript.swim.Swim.AnimationId = "rbxassetid://"--animateScript.swimidle.SwimIdle.AnimationId = "rbxassetid://"--animateScript.climb.ClimbAnim.AnimationId = "rbxassetid://"endlocal function onPlayerAdded(player)player.CharacterAppearanceLoaded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)對於每一行引用預設角色動畫的代碼,取消註解並在 rbxassetid:// 之後粘貼替換 ID。例如,將預設跑步動畫更改為忍者跑變體:
Script - 替換角色預設動畫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"--animateScript.walk.WalkAnim.AnimationId = "rbxassetid://"--animateScript.jump.JumpAnim.AnimationId = "rbxassetid://"--animateScript.idle.Animation1.AnimationId = "rbxassetid://"--animateScript.idle.Animation2.AnimationId = "rbxassetid://"--animateScript.fall.FallAnim.AnimationId = "rbxassetid://"--animateScript.swim.Swim.AnimationId = "rbxassetid://"--animateScript.swimidle.SwimIdle.AnimationId = "rbxassetid://"--animateScript.climb.ClimbAnim.AnimationId = "rbxassetid://"endlocal function onPlayerAdded(player)player.CharacterAppearanceLoaded:Connect(onCharacterAdded)endPlayers.PlayerAdded:Connect(onPlayerAdded)
設定動畫權重
你可以為相同的動作使用多個動畫。例如,在替換預設動畫的代碼示例中,有兩種 idle 變體。
當角色狀態存在多個動畫時,Animate 腳本會隨機選擇要播放的動畫,但你可以通過設定動畫的 Weight 值來影響選擇的結果,公式如下:
- 動畫權重 / 所有狀態動畫的總權重
在以下示例中,idle.Animation1 在角色靜止時會 ⅓ 的時間播放,而 idle.Animation2 會 ⅔ 的時間播放。
Script - 替換角色預設動畫animateScript.idle.Animation1.AnimationId = "rbxassetid://656117400"animateScript.idle.Animation2.AnimationId = "rbxassetid://656118341"animateScript.idle.Animation1.Weight.Value = 5animateScript.idle.Animation2.Weight.Value = 10
動畫參考
預設角色動畫
以下表格包含所有可以替換為目錄動畫或你自己的自定義動畫的預設角色動畫。請注意,Idle 有兩個變體,你可以根據需要調整權重以改變播放頻率。
| 角色動作 | Animate 腳本參考 |
| 跑步 | animateScript.run.RunAnim.AnimationId |
| 走路 | animateScript.walk.WalkAnim.AnimationId |
| 跳躍 | animateScript.jump.JumpAnim.AnimationId |
| 靜止 | animateScript.idle.Animation1.AnimationId |
| 墜落 | animateScript.fall.FallAnim.AnimationId |
| 游泳 | animateScript.swim.Swim.AnimationId |
| 游泳(靜止) | animateScript.swimidle.SwimIdle.AnimationId |
| 攀爬 | animateScript.climb.ClimbAnim.AnimationId |
目錄動畫
當使用角色動畫包來替換預設動畫時,請使用以下參考對應的資產 ID。例如,如果你想應用忍者跳躍動畫,使用 656117878。請注意,Idle 有多個變體。
| 宇航員 | 跑步 891636393 走路 891636393 跳躍 891627522 靜止 891621366, 891633237, 1047759695 墜落 891617961 游泳 891639666 游泳(靜止) 891663592 攀爬 891609353 |
| 泡泡 | 跑步 910025107 走路 910034870 跳躍 910016857 靜止 910004836, 910009958, 1018536639 墜落 910001910 游泳 910028158 游泳(靜止) 910030921 攀爬 909997997 |
| 卡通風格 | 跑步 742638842 走路 742640026 跳躍 742637942 靜止 742637544, 742638445, 885477856 墜落 742637151 游泳 742639220 游泳(靜止) 742639812 攀爬 742636889 |
| 長者 | 跑步 845386501 走路 845403856 跳躍 845398858 靜止 845397899, 845400520, 901160519 墜落 845396048 游泳 845401742 游泳(靜止) 845403127 攀爬 845392038 |
| 騎士 | 跑步 657564596 走路 657552124 跳躍 658409194 靜止 657595757, 657568135, 885499184 墜落 657600338 游泳 657560551 游泳(靜止) 657557095 攀爬 658360781 |
| 懸浮 | 跑步 616010382 走路 616013216 跳躍 616008936 靜止 616006778, 616008087, 886862142 墜落 616005863 游泳 616011509 游泳(靜止) 616012453 攀爬 616003713 |
| 法師 | 跑步 707861613 走路 707897309 跳躍 707853694 靜止 707742142, 707855907, 885508740 墜落 707829716 游泳 707876443 游泳(靜止) 707894699 攀爬 707826056 |
| 忍者 | 跑步 656118852 走路 656121766 跳躍 656117878 靜止 656117400, 656118341, 886742569 墜落 656115606 游泳 656119721 游泳(靜止) 656121397 攀爬 656114359 |
| 海盜 | 跑步 750783738 走路 750785693 跳躍 750782230 靜止 750781874, 750782770, 885515365 墜落 750780242 游泳 750784579 游泳(靜止) 750785176 攀爬 750779899 |
| 機器人 | 跑步 616091570 走路 616095330 跳躍 616090535 靜止 616088211, 616089559, 885531463 墜落 616087089 游泳 616092998 游泳(靜止) 616094091 攀爬 616086039 |
| Rthro | 跑步 2510198475 走路 2510202577 跳躍 2510197830 靜止 2510197257, 2510196951, 3711062489 墜落 2510195892 游泳 2510199791 游泳(靜止) 2510201162 攀爬 2510192778 |
| 時尚 | 跑步 616140816 走路 616146177 跳躍 616139451 靜止 616136790, 616138447, 886888594 墜落 616134815 游泳 616143378 游泳(靜止) 616144772 攀爬 616133594 |
| 超級英雄 | 跑步 616117076 走路 616122287 跳躍 616115533 靜止 616111295, 616113536, 885535855 墜落 616108001 游泳 616119360 游泳(靜止) 616120861 攀爬 616104706 |
| 玩具 | 跑步 782842708 走路 782843345 跳躍 782847020 靜止 782841498, 782845736, 980952228 墜落 782846423 游泳 782844582 游泳(靜止) 782845186 攀爬 782843869 |
| 吸血鬼 | 跑步 1083462077 走路 1083473930 跳躍 1083455352 靜止 1083445855, 1083450166, 1088037547 墜落 1083443587 游泳 1083464683 游泳(靜止) 1083467779 攀爬 1083439238 |
| 狼人 | 跑步 1083216690 走路 1083178339 跳躍 1083218792 靜止 1083195517, 1083214717, 1099492820 墜落 1083189019 游泳 1083222527 游泳(靜止) 1083225406 攀爬 1083182000 |
| 僵屍 | 跑步 616163682 走路 616168032 跳躍 616161997 靜止 616158929, 616160636, 885545458 墜落 616157476 游泳 616165109 游泳(靜止) 616166655 攀爬 616156119 |