負責播放和複製 Animations 的主要類別。所有複製播放 AnimationTracks 的處理都是通過 Animator 實個體、實例來處理。
概要
屬性
方法
計算零件和應用相對速度之間的速度,並將它們應用到 Motor6D.Part1 。這些相對速度計算和分配會按照指定的順序進行。
返回目前正在播放的 AnimationTracks 清單。
將 Animation 載入在 Animator 上,並且返回 AnimationTrack。
增加 AnimationTrack.TimePosition 的所有載入到 AnimationTracks 的玩家,並且將其中的偏移量應用到模型上的 Animator 。僅限於指令條或由插件載入。
活動
啟動時,Animator 會開始播放一首動畫軌跡。
屬性
方法
ApplyJointVelocities
考慮到現有的 AnimationTracks 播放,以及其當前的時間和播放速度,計算相對速度在零件之間,並將它們應用到Motor6D.Part1 (子部分)。這些相對速度計算和分配在指定的順序中發生。
此方法不適用於指定的關節,如果兩個關組合的零件目前是相同的裝配,例如,如果它們仍然是由電機或焊接直接或間接地連接。
此方法不會為您停用或移除關節。您必須先停用或其他方式移除裝配件的靈活關節才能召喚此方法。
Motor6Ds 不需要成為 DataModel 的後代。移除 DataModel 的關節前,才能支持此方法。
參數
返回
LoadAnimation
此功能將指定的 Animation 載入此 Animator 上,並且返回可播放的 AnimationTrack。當客戶端在模型中呼叫 2>Class.Animator2> 時,此功能也會載入此 5>Class.BasePart:SetNetworkOwner5> 上的動
您應該使用這個功能,而不是類似名稱的 Humanoid:LoadAnimation() 和 AnimationController:LoadAnimation() 功能。這些是此功能的過時代理,也會創建一個 Animator 如果沒有人存在;這可能會導致複製問題。如果您不小心,這可能會導致重複問題。
在客戶機或伺服器上載入動畫
為了正確重複 AnimationTracks,重要是要知道它們應該在客戶端或伺服器上載入時間:
如果 Animator 是 Humanoid 或 AnimationController 的後代,在玩家的 2>Class.Player.Character2> 中,客戶端的動畫將會在服務器和其他客戶端上重複到服務器。
如果 Animator 是 不 是玩家角色的後代,其動畫必須在服務器上載入並啟動才能複製。
Class.Animator 對象必須先在服務器上創建,然後才能對客戶端進行動畫重複,才能正常運行。如果 Animator 是在本地創建的,那麼載入該 AnimationTracks 的話,就不會重複。
參數
返回
StepAnimations
增加 AnimationTrack.TimePosition 的所有載入到 AnimationTracks 的玩家,並且將其中的偏移量應用到模型上的 Animator 。僅限於指令條或由插件載入。
DeltaTime 參數決定要在動畫的進度上增加的秒數。通常此功能會在預覽動畫長度時呼叫為一個循環來預覽動畫的長度 (請參閱範例)。
注意,動畫停止播放後,模型的關節將需要手動重設為原始位置 (請參閱範例)。
此功能用於模擬游戲不在執行時播放 Animations 時的預覽。這允許動畫在執行遊戲時無需擔心的情況下預覽動畫,例如執行指令碼。如果在遊戲執行時或由 Scripts 或
開發自訂動畫編輯器的開發者建議使用此功能來預覽動畫,因為它是 Roblox 官方動畫編輯器 插件的方法。
參數
秒鐘動畫播放的時間量將會增加。
返回
範例程式碼
local RunService = game:GetService("RunService")
local function studioPreviewAnimation(model, animation)
-- find the AnimationController and Animator
local animationController = model:FindFirstChildOfClass("Humanoid")
or model:FindFirstChildOfClass("AnimationController")
local animator = animationController and animationController:FindFirstChildOfClass("Animator")
if not animationController or not animator then
return
end
-- load the Animation to create an AnimationTrack
local track = animationController:LoadAnimation(animation)
track:Play()
-- preview the animation
local startTime = tick()
while (tick() - startTime) < track.Length do
local step = RunService.Heartbeat:wait()
animator:StepAnimations(step)
end
-- stop the animation
track:Stop(0)
animator:StepAnimations(0)
-- reset the joints
for _, descendant in pairs(model:GetDescendants()) do
if descendant:IsA("Motor6D") then
local joint = descendant
joint.CurrentAngle = 0
joint.Transform = CFrame.new()
end
end
end
local character = script.Parent
local animation = Instance.new("Animation")
animation.AnimationId = "rbxassetid://507765644"
studioPreviewAnimation(character, animation)