Skip to main content

开关对象(使用手动动画)

image-1714320397206.png

在本教程中,我们将创建一个能够使一个方块显示/隐藏的简单预制件(Prefab)。而且我们会将其附着到虚拟角色的手上方便观察。

第一步:创建对象

我们从创建需要显示的方块后开始。将测试用虚拟形象拖入到场景中,在其中新建一个空的游戏对象(GameObject)作为您的预制件(Prefab)的根对象(我们将他命名为 ToggleDemo)。在这个游戏对象中新建一个名为 HandRef 的对象,我们将使用这个对象追踪手部。将我们刚才创建的方块拖入 HandRef 对象中。

setup1-38c0a0848460ef8af48a58a229ea7ad4.png

将方块附着在虚拟形象的手上

接下来我们使 HandRef 对象追踪虚拟形象的右手。选中 HandRef 对象,并在检查器(Inspector)中点击 Add Component(添加组件)。 添加 MA Bone Proxy 组件。

setup2-375a0b224fabb054620868bb8c7e785a.png

将虚拟形象的右手骨骼拖拽到 Target(目标) 一栏,将 Attachment Mode(固定模式) 修改为 As child; at root(作为子项,位于根位置)。 方块会立即附着到虚拟形象的手上。调整方块的缩放(Scale)和位置(Position),直到他不再遮挡视线。 记得要把方块中的 Box Collider(盒碰撞体) 组件删除!

setup3_en-fddd816159163f6b022e548e7c3461c7.png

第二步:创建动画控制器

接下来,我们创建能够控制方块的显示状态的动画控制器(Animator Controller)。 新建一个动画控制器(Animator Controller)和两个动画(Animation Clip)(我们把两个动画分别命名为 CubeOffCubeOn)。 打开动画控制器,将两个动画拖入其中。 然后右键 Any State,点击添加过渡(Add Transition),并连接到 CubeOff。为 CubeOn 也做同样的操作。

controller1-ead459b0b6658f2952cfbc71e522b445.png

设置过渡

创建一个新的布尔(Bool)参数,重命名为 Cube。然后将刚才创建的两个过渡的 Duration(过渡持续时间) 设为 0,将两个过渡的 Can Transition to Self(可以过渡到自己) 关闭。 将参数 Cube 添加到条件(Conditions)中,在指向 CubeOff 的过渡中,将这个条件设置为 False(假)

controller2-28f1772262795b29427a0347a23e2a50.png

第三步:合并动画机

回到我们创建的根对象,为其添加 MA Merge Animator 组件。 将 Animator to merge(用于合并的动画机) 一栏设置为刚才创建的新动画控制器。勾选 delete attached animator(删除已添加的动画机)match avatar write defaults(匹配虚拟形象的Write Defaults设置)。 然后添加一个 Animator(动画机) 组件,也将其指向刚才创建的新动画控制器。

merge-animator-en-3dca50c967d18f7decccf90a68201382.png

💡 提示

Merge Animator(合并动画机) 组件并不是必须要添加到根对象。您可以将其放到更深处的层级中。只需要保证 MA Parameters(MA 参数) 组件(我们会在下文中提到)在同一个对象,或者在 Merge Animator(合并动画机) 组件和 Menu Installer(菜单安装器) 组件的父对象中!

第四步:录制动画

前往 Unity 的动画(Animation)窗口。如果您没有找到动画(Animation)窗口,按下 Ctrl-6 将其呼出。 您将在动画列表中看到 CubeOffCubeOn,如果没有,请保证您已经选中了 ToggleDemo 对象。

在动画列表中选中 CubeOff 后,点击红色的录制按钮,然后将方块的游戏对象(GameObject)关闭。

rec1-44afbab2e00ec7efa06b7dbd781348dd.png

选中 CubeOn 后,点击红色的录制按钮,然后将方块的游戏对象(GameObject)关闭后重新打开。

rec2-0df0e1adea095f08c374eca1d00a6bc3.png

第五步:设置同步参数

就快完成了!接下来,我们将设置同步参数。

回到我们的 ToggleDemo 对象,为其添加 MA Parameters(参数) 组件。勾选 Show Prefab Developer Options(显示预制件开发者选项)。 能看到我们的 Cube 参数被自动添加了。将同步模式修改为 Bool(布尔),并且勾选 Internal(内部) 选项。

params-en-1381d1aa197a123bbbea837fabc12df0.png

💡 提示

如果您勾选了 Internal(内部) 选项,Modular Avatar 将保证这里的 Cube 参数不会干涉虚拟形象中的任何同名参数。如果您不勾选,用户将能够随意重命名该参数,但是也能够选择让多个预制件(Prefab)使用同一个参数。

第六步:设置菜单

终于,我们要设置 Av3 菜单条目了。创建一个 Expressions Menu(表情菜单) 资产:

exp-menu-create-79386a2bb17fc418f8630f2240f4e52c.png

在其中添加一个菜单项,命名为 Cube,将类型改为 Toggle(开关),在参数一栏的文本框中,输入 Cube。 因为我们还未编译虚拟形象,所以参数没有出现在下拉菜单中。但是没关系!

exp-menu-setup-eac6cb3730b33f103b7446898ad5a3fe.png

ToggleDemo 对象添加一个 MA Menu Installer 组件。展开 Prefab Developer Options(预制件开发者选项) 部分,将刚才创建的表情菜单资产放入其中。

menu-installer-en-02844a55eb7faab4c192f2f723f9c247.png

结束了!将虚拟形象编译并上传后,您应该能在菜单中找到一个能够将方块召唤到您的右手的开关。

收尾:预制件转换和组件排序

准备好分发我们的方块吧。首先,由于用户最有可能去摸索 Menu Installer(菜单安装器) 组件(如果您禁用了内部选项的话)和 MA Parameters(MA 参数) 组件。 所以我们可以将这俩组件挪到检查器(Inspector)的最上端。

component-ordering-en-a8c37a14f9a0122d96d63f434c6c3dfe.png

完成组件的排序后,将 ToggleDemo 对象拖入项目(Project)窗口创建预制件(Prefab)。现在只要你将预制件(Prefab)拖到任何虚拟形象里就能即刻拥有一个方块!