Skip to main content

参数类型不一致 (Expression Parameter Mismatch)

原文出处:https://notes.sleightly.dev/parameter-mismatching/

译者注释:Bool 布尔 (True/False)

译者注释:Int 整数/整形 (0, 1, 2, 3, 4, 5...)

译者注释:Float 浮点/小数 (0.13, 0.45, 0.255...)

译者注释动画器参数 指的是 Animator 内的参数;Expression 参数 指的是 VRC Expression Parameter List 内的参数

在一般的 VRChat Avatars 3.0 创作过程中,VRChat Expression Parameters 的参数类型应该设置为与 Animator 内相同的类型(BoolIntFloat)。

然而,Expression Parameters 和 Animator 参数之间的参数类型在不一致的情况下也仍能正常工作。这种行为因参数类型的不同而有所差异,具体如下所述。

image.png

一个标记为 Toggle 的参数被添加到 VRChat Expression Parameters 中,类型为 Bool

image.png

一个标记为 Toggle 的参数被添加到 local Animator 参数中,类型为 Float

已知互相兼容的参数类型及其行为

Expression Parameter Bool

动画器参数 → Expression 参数 Expression Bool = False Expression Bool = True
Bool → Bool Bool = False Bool = True
Bool → Int Int = 0 Int = 1
Bool → Float Float = 0.0 Float = 1.0

Expression Parameter Int

动画器参数 → Expression 参数 行为
Int → Bool 任何大于 0Int 值将使 bool 为 True
Int → Int 预期行为
Int → Float 直接转换:例如 Int = 2Float = 2.0


Expression Parameter Float

动画器参数 → Expression 参数 行为
Float → Bool 任何大于 0Float 值将使 bool 为 True
Float → Int 四舍五入转换:≥0.51 ; <0.50
Float → Float 预期行为

为什么 Avatar 参数类型之间互相兼容?

Unity Animators 在 C# 后端使用浮点数处理参数,而 VRChat 则使用 SBytes 代替 bool、int 或 float。

Animator 和 VRCSDK 通过允许你从界面中选择参数类型来优化用户体验。

如果这样来看的话,参数并不是被转换,而是不一致

这种不一致的兼容性同样适用于 VRChat 的内置参数

目前,AV3 Emulator 和 GestureManager 已经实现了模拟参数类型兼容的功能。