主要负责播放和复制 Animations 。所有复制播放 AnimationTracks 的复制都由 Animator 实例处理。
概要
属性
方法
在零件之间计算相对速度,并将其应用到 Motor6D.Part1 。这些相对速度计算和分配在提供的顺序中发生。
返回当前播放列表AnimationTracks。
将 Animation 加载到一个 Animator 上,并且返回一个 AnimationTrack。
增加 AnimationTrack.TimePosition 的所有播放 AnimationTracks 上的时间位置,并将其应用到 Animator 上,使用 1> Class.Animator1> 的 Offset 来模型联系到 4> Class.Animator4> 。仅在命令栏或通过插件使用。
活动
当 Animator 开始播放 AnimationTrack 时,它会发射。
属性
方法
ApplyJointVelocities
考虑到现有的 AnimationTracks 播放,以及其当前时间和播放速度,在零件之间计算相对速度,并将其应用到Motor6D.Part1(Animator 考虑的 “子” 部分)。这些相对速度计算和分配在提交的顺序。
此方法不适用于给定的关节,如果其中的两个部分现在都是相同的装配,例如,如果它们仍然通过电机或焊接直接或间接地连接在一起。
此方法不会为您禁用或移除关节。您必须禁用或者否则从装配中移除刚性关节才能调用此方法。
给出的 Motor6Ds 不需要是 DataModel 的后代。移除从 DataModel 之前的关节是支持此方法的。
参数
返回
LoadAnimation
此函数将指定的 Animation 加载到此 Animator 上,返回一个可玩的 AnimationTrack。 当客户端有网络所有者时,调用 2>Class.Animator2> 内的一个 5>Class.AnimationTrack5> 也会加载此功能。
您应该使用这个函数直接而不是类似命名的 Humanoid:LoadAnimation() 和 AnimationController:LoadAnimation() 函数。这些都是此函数的过时代理,也会创建一个 Animator 如果不存在;这可能会导致复制问题,如果您不小心。
在客户机或服务器上加载动画
为了正确地复制 AnimationTracks,重要是要知道它们在客户端或服务器上何时加载:
如果 Animator 是一个子 Humanoid 或 AnimationController 在玩家的 2>Class.Player.Character2> 上,玩家的客户端上的动画将被复制到服务器和其他客户端。
如果 Animator 是 不 是玩家角色的后代,其动画必须在服务器上加载并开始才能复制。
Class.Animator 对象必须在服务器上初始创建,然后复制到客户端以便在全部个复制动画时使用。如果 Animator 是本地创建的,那么 AnimationTracks 就会 Load入那个 1>Class.Animator1> 并复制。
参数
返回
StepAnimations
增加 AnimationTrack.TimePosition 的所有播放 AnimationTracks 上的时间位置,并将其应用到 Animator 上,使用 1> Class.Animator1> 的 Offset 来模型联系到 4> Class.Animator4> 。仅在命令栏或通过插件使用。
DeltaTime 参数确定要在动画进度上增加的秒数。通常,此函数会在循环中调用,以预览动画长度(请参阅示例)。
注意,当动画停止播放时,模型的关节将需要手动重置到其原始位置(请参阅示例)。
此功能用于模拟游戏不运行时的 Animations 的播放。这允许动画在运行游戏时无需进行预览,例如脚本执行。如果函数在游戏运行时或通过 Scripts 或 LocalScripts 调用,它将返回一个错误。
设计自己的自定义动画编辑器的开发人员建议使用此功能来预览动画,因为它是 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)