图形编辑器表达式

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

一个 表达式 是一个简短的类似 Luau 的公式,它读取图形参数并返回一个值,例如 math.clamp((MovementSpeed + 0.5) / MaxSpeed, 0, 1)。使用表达式来驱动节点属性或 状态机过渡。表达式将参数转换和动画决策保留在您的图形中,靠近它们驱动的节点。

前提条件

在您创建表达式之前,请熟悉 动画图形编辑器,包括如何 打开它并创建动画图形。

创建表达式

此示例使用表达式来驱动 Blend1DNode 的 Position 属性。将节点配置为在位置 0 处有一个闲置动画,在位置 1 处有一个奔跑动画。该表达式将角色的移动速度转换为节点用于在这些动画之间混合的 0 到 1 范围。

  1. 添加 MovementSpeed 和 MaxSpeed 数字图形参数。

    参数面板显示 MovementSpeed 和 MaxSpeed 数字参数。
  2. 从 Blend1DNode 的 Position 属性引脚拖动连接并选择 新表达式。

    从 Blend1D Position 属性引脚创建表达式节点的动画演示。
  3. 输入以下表达式:

    math.clamp(MovementSpeed / MaxSpeed, 0, 1)
    在表达式节点中输入表达式的动画演示。
  4. 点击表达式框外以刷新它。随着 MovementSpeed 向 MaxSpeed 上升,Blend1DNode 接收从 0 到 1 的值,并从闲置动画过渡到奔跑动画。

在您将图形加载到 AnimationTrack 上后,通过您的游戏脚本使用 AnimationTrack:SetParameter() 更新 MovementSpeed 和 MaxSpeed。以下示例使用 MoveDirection 和 WalkSpeed 属性:

脚本 - 驱动表达式参数
game:GetService("RunService").Stepped:Connect(function()
animationTrack:SetParameter("MovementSpeed", humanoid.MoveDirection.Magnitude * humanoid.WalkSpeed)
animationTrack:SetParameter("MaxSpeed", humanoid.WalkSpeed)
end)

随着参数值的变化,表达式会进行评估。有关参数工作流,请参见 API 集成。

支持的内容

表达式支持包括算术和比较操作、逻辑和条件表达式、对 math 库中函数的调用、CFrame、Vector2、Vector3 和 Color3 值的构造和成员访问,以及字符串连接。以下部分列出了支持的语法和函数。

算术和比较

使用标准的算术和比较操作,遵循通常的运算顺序。例如,// 进行除法并向下取整。

Speed * 2.0 + Offset
(Health / MaxHealth) * 100
DamageMultiplier ^ 2
Count % 3
10 // 3
Speed < 1
Health >= MaxHealth

比较运算符适用于数字。使用 == 和 ~= 来比较数字、布尔值或字符串。

逻辑和短路

and、or 和 not 遵循 Luau 的真值和短路评估。只有 false 和 nil 被视为假。

IsGrounded and GroundSpeed or AirSpeed
not IsDisabled

If-then-else 表达式

使用 Luau 的条件表达式形式在单个表达式中进行分支:

if Speed > 10 then "sprint" elseif Speed > 2 then "run" else "idle"

数学库

使用 math 库。图形表达式尚不支持 math.frexp()、math.noise() 或 math.randomseed()。math.modf() 目前仅返回整数部分。

math.clamp(Speed / MaxSpeed, 0, 1)
math.sin(Time * 2 * math.pi)
math.atan2(Direction.Y, Direction.X)
math.max(A, B, C)

向量构造和成员访问

构造 Vector2 和 Vector3 值,执行向量算术,并访问向量成员,如 Magnitude 和 Unit。

Vector3.new(math.cos(Time), math.sin(Time), 0)
Vector2.new(InputX, InputY)
MoveDirection.Magnitude * 2.0
Position.X + Offset
Vector3.zero

Color3 构造和成员访问

构造 Color3 值并访问其颜色通道。

Color3.fromRGB(255, 128, 0)
Color.R

CFrame 构造、成员访问和操作

构造 CFrame 值,访问 CFrame 成员,并将它们与 CFrames 或 Vector3 值结合。

CFrame.new(Position, LookAtPosition)
CFrame.Angles(RotationX, RotationY, RotationZ)
CFrame.identity
Transform.LookVector
Transform.Position + Vector3.new(0, 1, 0)

字符串连接

使用 .. 连接两个字符串:

"state_" .. CurrentState

局部变量和多行表达式

使用多行表达式将公式分解为命名步骤。多行表达式支持 local 声明、return、if/elseif/else 和独立表达式。在 if 或 else 体内,仅使用 return 或独立表达式;不支持嵌套的 if 语句和局部声明。

local normalizedSpeed = Speed / MaxSpeed
local eased = math.clamp(normalizedSpeed, 0, 1)
return eased
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。