

中文名称: 形状键同步组件
用途: 将一个物体上的特定 Blendshape(形状键)的值与另一物体上的对应 Blendshape 保持一致。这样可确保当一个模型的形状键改变时,另一个模型的对应形状键会同步变化。
常见使用需求: 当 Avatar 本体有用于调整身形的形状键,而您添加的服装或配件具有相同的形状键时,需要同步两者的数值即可使用该组件。此外,如果 Avatar 自身的不同部位之间存在需要联动的 Blendshape(例如头发和面部表情的形状键),也可以通过它来同步。注意该组件只适用于动画器控制的形状键,同步时复制数值相同,不适用于需要不同曲线/比例的情况。
典型应用场景: 例如 Avatar 有一个“体型胖瘦”的 Blendshape,衣服上有对应的形状键,通过 Blendshape Sync 组件可保证角色变胖时衣服也同步变大,从而贴合身体。又如给基础 Avatar 增加一副眼镜,眼镜模型和头部都有同名的表情 Blendshape,使用该组件可让眼镜随头部表情变化而变化。
中文名称: 骨骼代理组件
用途: 将预制件中的物体插入到 Avatar 原始骨架/物体中指定的位置下,使预制件的对象成为 Avatar 一部分。Bone Proxy 会在构建时将带有该组件的对象重定位为 Avatar 中目标对象的子对象,并自动调整动画器路径引用。
常见使用需求: 当您希望将一个新物体附加到 Avatar 已有的骨骼或对象上(而非简单地跟随骨骼,而是成为其子物体)时使用。例如给 Avatar 的手上添加碰撞器或接触触发器,这时可将碰撞器通过 Bone Proxy 放入手部骨骼下。该组件常用于将道具(如武器、特效物体)精确地对齐并附加到 Avatar 指定部位。注意 Bone Proxy 不适用于服装骨骼合并(此种情况应使用 Merge Armature)。
典型应用场景: 比如在 Avatar 的手掌骨骼内放置一个“击掌”特效的触碰组件,在预制件上对触碰组件添加 Bone Proxy,目标指向 Avatar 的手掌骨骼,这样构建后触碰组件就准确成为手掌的子对象。又如将一个饰品通过 Bone Proxy 附加到头部骨骼下,饰品会随头部动作运动但无需手动调整路径。Bone Proxy 还能确保原本引用旧层级的动画路径在重定位后自动更新。
中文名称: 转换约束组件
用途: 在构建 Avatar 时,将 Unity 编辑器中的 Constraint 组件无损地转换为 VRChat 原生的约束,实现运行时兼容。它会遍历附加此组件的对象及其子对象上的所有 Unity Constraint(如父约束、Aim约束等),将它们转为 VRChat 支持的约束形式,并修正相关动画引用。
常见使用需求: 几乎所有带有 Constraint 动作的 Avatar 都应在根物体上添加此组件,以预先转换约束来显著提升运行时性能。安装 Modular Avatar 后,VRChat SDK 的“Auto Fix”按钮也会自动在 Avatar 根节点加上该组件(如果尚未添加),这表明其使用非常普遍。一般您只在特殊情况下为了排查问题才会移除它。
典型应用场景: 例如您的 Avatar 使用了 Unity 的 Parent Constraint 来让一把剑跟随手部移动。若不转换,上传后剑可能无法正确跟随或性能受损。通过 Convert Constraints,该 Parent Constraint 会在构建时自动转换为 VRChat 内置的跟随机制,使剑在游戏中正常跟手移动且开销较低。又如一些旧版本 Modular Avatar 可能和 VRC SDK Auto Fix 冲突导致动画丢失,此组件也尝试修复那些因 Auto Fix 而断开的动画链接。总之,只要 Avatar 用到了 Unity 约束,就应该使用本组件。
中文名称: 菜单组组件
用途: 让一个 Menu Installer 可以安装多个菜单项(Menu Items)且不强制将它们放入子菜单,用于将一组菜单项作为整体插入目标菜单。本组件主要作为内部工具,用于将现有表达式菜单转换到 Modular Avatar 系统时,保持多个选项平级添加而不创建额外子菜单。
常见使用需求: 一般不需要手动添加,在需要时 Modular Avatar 会自动生成它。典型用例是在您希望通过一个菜单安装器添加多个菜单按钮且不想嵌套子菜单时。比如一个预制件包含3个独立开关,希望它们直接并列出现在 Avatar 菜单中,那么可使用 Menu Group 将这3个 Menu Item 打包给同一个 Menu Installer 安装。
典型应用场景: 例如一个“配饰包”预制件里有“项链开关”、“眼镜开关”、“帽子开关”三个菜单项。通过在预制件根物体添加 Menu Group 组件(其子物体挂有各自的 Menu Item),再搭配一个 Menu Installer,就能将这三个选项一起安装到 Avatar 菜单的同一层级,而不会被强制放进子菜单。转换他人提供的 Expressions菜单资产时,MA 也会用 Menu Group 来保持菜单结构平坦。
中文名称: 菜单安装目标组件
用途: 配合 Menu Installer 的“Select Menu”(选择菜单)功能使用,用于指定预制件菜单要安装到 Avatar 菜单树的哪个位置。它会“拉取” Menu Installer 上定义的菜单,并根据 Menu Install Target 附加的对象位置,将菜单插入到对应的Expressions菜单分支中。
常见使用需求: 大部分情况下无需手动添加。当您在 Menu Installer 上点击“Select Menu”并选择了 Avatar 的某个子菜单作为安装位置时,系统会自动在那个子菜单对象上创建此组件。因此只有在特殊自定义菜单结构时才考虑用它。它的作用是覆盖 Menu Installer 原本默认的顶层安装行为,改为将菜单植入您选定的子菜单中。这在需要将预制件的菜单集成进 Avatar 现有的物体驱动菜单系统时特别有用。
典型应用场景: 例如您的 Avatar 已有一个“道具控制”子菜单,您导入了一个带 Menu Installer 的预制件,想把预制件的控制项放进“道具控制”里而不是顶层。这时在 Menu Installer 上选择目标菜单为“道具控制”,MA 会自动在该子菜单对象上添加 Menu Install Target 组件。构建后,预制件的菜单选项会出现在 Avatar 的“道具控制”子菜单下。通常最终用户只需使用 UI 操作,不需要理解此组件细节,它更多在幕后发挥作用。
中文名称: 菜单安装器组件
用途: 将预制件定义的 Expressions 菜单项或菜单整体,自动添加到 Avatar 的表情菜单中。它极大简化了给 Avatar 增加新菜单控件的流程——拖入预制件后,这些控件就会被安装进 Avatar 菜单。默认情况下会安装在动作菜单(Action Menu)的顶层;您也可以通过“Select Menu”选择安装到指定子菜单。
常见使用需求: 当您的预制件包含自定义菜单功能(如开关、子菜单等)时,使用 Menu Installer 将这些控件合并到 Avatar 的表达式菜单中。对最终用户而言,只要拖放预制件,这些菜单项就自动出现在 Avatar 菜单里,无需手动编辑菜单资产。如果菜单放置的层级已满,系统会自动分页(创建子菜单)。您也可以勾选禁用选项以完全不安装菜单(例如用户不想用该预制件的菜单)。对预制件作者而言,需预先制作好 Expressions Menu 资产并在 Menu Installer 的字段中指定它,然后与 MA Parameters 搭配使用。
典型应用场景: 例如一个“翅膀开关”预制件自带菜单资产,可以打开/关闭翅膀。将 Menu Installer 添加在预制件上并指定该菜单资产,用户拖入预制件后,Avatar 的动作菜单会自动出现一个翅膀开关按钮,无需额外设置。又如更复杂的预制件带有子菜单(比如“魔法技能”子菜单下有多个技能按钮),Menu Installer 也支持通过附加 Menu Item/Menu Group 或 Select Menu 来把整套菜单正确嵌入 Avatar 的菜单结构中。
中文名称: 菜单项组件
用途: 直接在 Unity 层级视图中定义一个 Expressions 菜单选项。与传统的制作 VRC 表情菜单资产不同,Menu Item 组件提供图形化界面,可在Inspector里设置菜单项的名称(取自对象名称)、图标、类型(如切换/按钮/子菜单)和关联参数等。它还能通过读取 MA Parameters 了解可用参数名,使配置更便捷。
常见使用需求: 当您希望在制作预制件或 Avatar 时,直接在场景里设计菜单结构时会使用它。相较创建 ScriptableObject 资产再填,使用 Menu Item 可以在层级中拖拽排列菜单项顺序,并即时预览结构。特别是当您的预制件需要多个菜单项或子菜单时,在 Unity 中用 Menu Item 搭配 Menu Installer 会更直观方便。需要注意的是单个 Menu Item 本身并不会自动出现在菜单里,必须通过三种方式之一“绑定”到实际菜单:要么作为另一个 Menu Item(子菜单模式)的子物体,要么与 Menu Installer 放在同一对象上,要么作为 Menu Group 的子物体。
典型应用场景: 例如您想为 Avatar 添加“摘下眼镜”的开关。您可以在 Avatar 的某个对象下添加一个 Menu Item 组件,将GameObject命名为“眼镜”,类型设为Toggle,参数设为GlassesToggle(并在 MA Parameters 中定义)。然后将这个对象放在一个 Menu Installer 所在的位置。这样构建后,Avatar 菜单会出现一个名为“眼镜”的切换按钮,可以控制参数GlassesToggle的值,进而实现戴/摘眼镜的效果。整个过程不需要手动编辑Expressions菜单资产,所见即所得。
中文名称: Animator合并组件
用途: 将预制件自带的 Animator Controller 动画控制器添加到 Avatar 的指定 Animator层中(例如FX层)。Merge Animator 不会替换 Avatar 原有层,而是新增一个动画层或在指定层附加状态,从而把复杂的 AV3 动画“套路”随预制件一起安装到Avatar上。
常见使用需求: 当您的预制件包含自定义动画(如特效、动作状态机)时,使用该组件自动将这些动画融合进 Avatar 的Animator系统。比如一个道具需要在FX层持续播放动画,Merge Animator可以把预制件的FX控制器直接并入,而无需用户手工合并动画。如果需要添加的动画不想完全替换用户已有层(只是追加功能),Merge Animator非常合适。一般用于带有复杂动画状态的“gimmick”预制件(例如击掌特效、手指绘画笔等)。
典型应用场景: 例如一个“击掌触发烟花”的预制件包含一个定制的FX动画控制器(监听手势引发粒子特效)。将 Merge Animator 添加到预制件,指定该 Animator 控制器并选择FX层,构建后Avatar的FX控制器里就自动多出一套击掌烟花的动画状态机。用户仅需拖入预制件,Avatar 就具备了击掌放烟花的功能,无需自己编辑Animator。注意: Merge Animator 添加的是新的动画层或状态,不会移除Avatar原有的动画功能,如果需要完全替换某层Animator则需手动在Avatar Descriptor中更换。
中文名称: 合并骨架组件
用途: 将预制件的一组骨骼/模型合并到 Avatar 的骨架中。它专为服装预制件设计,能够匹配预制件骨骼与 Avatar 同名骨骼,并将预制件的 Skinned Mesh Renderer 重定向到 Avatar 原有骨骼上,避免生成重复骨骼。该组件具有特殊逻辑来更新蒙皮网格引用并尽量减少新骨骼的生成。
常见使用需求: 当您要为 Avatar 添加贴身换装(衣服、铠甲等)且这些物体是蒙皮网格(Skinned Mesh)时使用。尤其是衣物按Avatar骨骼权重绑定好的情况,通过 Merge Armature 可将衣物骨骼和Avatar骨骼合并,使衣物随Avatar动作完美贴合。这样服装不会产生重复的“套”在骨架外的骨骼,提升性能和兼容性。不过,由于该组件假定骨骼不会移动,一般不适用于想兼容多种不同骨架Avatar的通用预制件(例如魔法道具,更适合特定Avatar的服装)。
典型应用场景: 例如给Avatar添加一件新衣服,这件衣服使用与Avatar相同命名的骨骼(如Hips、Spine等)。在衣服预制件根物体上添加 Merge Armature,并将Avatar对应的Hips骨骼拖入其“Merge Target”。构建后,衣服的骨骼会与Avatar骨架融合,衣服网格直接使用Avatar本身的骨骼驱动,动作对齐完美。另外,Merge Armature 自动去除多余的骨骼前缀/后缀以找到匹配骨骼,确保不同命名约定的模型也能正确合并。
中文名称: 合并动作组件(Blend Tree)
用途: 将一个或多个动画(可以是 Blend Tree 或独立 Animation Clip)合并到 Avatar 的单一动画层中。这是高级用法,旨在将多个小动画“组合”进同一 Animator层,以降低动画图的复杂度和开销。它也可用于设置始终运行的动画(无论有无切换,一直在播放)。
常见使用需求: 当您有一些需要永久激活的动画效果(如Idle细节动画、环境反应动画),或者想把多个独立动画融合在一个层里连续运行时,会用到 Merge Motion。例如同时常驻的呼吸BlendTree、眨眼动画等,通过此组件可放在同一层合并播放,而不必每个都占用一层Animator。需要注意如果动画需要开关控制或时间控制(启停/进度),不应使用本组件,而应采用普通动画层切换机制,因为 Merge Motion 一旦合并后动画将一直运行不可单独禁用。
典型应用场景: 比如Avatar有一个持续循环的“心跳发光”动画和一个“全身抖动”Idle动画,使用 Merge Motion 可以将这两个动画合并到FX层的同一个Blend Tree里同时运行。这样避免新增多余动画层,优化了Avatar的Animator结构。又如为Avatar添加一个“始终飘浮在头顶的光环”动画,也可通过Merge Motion把该动画直接加进Avatar的FX层,使光环从Avatar加载后就持续漂浮,无需开关触发。
中文名称: 网格设置组件
用途: 批量设置某一对象下所有网格渲染器的特定属性,如光照探针锚点(Anchor Override)和包围盒大小(Bounds)。通过 Mesh Settings,您可以统一调整Avatar或预制件局部的Mesh参数,确保渲染效果和裁剪行为一致。
常见使用需求: 全局Bounds/Anchor调整:通常将该组件放在Avatar的顶层,使Avatar所有子网格使用统一的包围盒和光照锚点,防止局部物件过大过远被错误裁剪或光照不均。Modular Avatar 提供的“Setup Outfit”功能在合并新衣物时会自动添加 Mesh Settings,设定适当的Bounds以包含新模型。此外,若想让某子对象不受父级Mesh Settings影响,可在该子对象加另一Mesh Settings并将模式设为“Don't set”(不设定),从而排除在外。
典型应用场景: 例如给Avatar添加一对巨大的翅膀,如果不调整包围盒,翅膀展开时可能由于超出原始Bounds而在某些视角下消失。给Avatar根节点添加 Mesh Settings,将Bounds模式设为自定义值,确保包含翅膀范围,可解决该问题。又如Avatar使用移动端着色器(Mobile Shader)时,希望所有网格都以胸部为光照锚点计算光照,可以通过Mesh Settings设置 Anchor Override,这样Avatar各部分在不同光照环境下亮度一致。
中文名称: MMD层控制组件
用途: 处理VRChat中“MMD世界”的兼容性。当进入一些MMD舞蹈地图时,这些世界会禁用Avatar的FX动画控制器第2、3层(通常是面部表情层),以便用地图动画覆盖表情。MMD Layer Control 则允许您将额外的动画层纳入这一禁用/启用机制。它以状态机行为的形式附加在Animator的层上,使该层也能被MMD世界统一控制开关。
常见使用需求: 除非您的Avatar将被用在这些MMD地图且添加了超过3层的自定义动画,否则一般不需要这个组件。MA默认会自动处理原始第2、3层的禁用启用,只有当您通过 Merge Animator 添加了新层且希望这些新层也跟随MMD世界规则时,才会在对应层上附加 MMD Layer Control。反之,如果您不希望Avatar受MMD世界影响,可以通过 VRChat Settings 禁用相应支持。
典型应用场景: 例如您的Avatar通过Merge Animator增加了一层第四层动画用于某个道具效果。在普通世界中正常,但进入某些MMD地图时,这层依然运行而与地图动画冲突。此时可在第四层Animator上添加 MA MMD Layer Control 状态机行为,使其在MMD世界中也会被禁用,从而避免冲突。大多数情况下,这属于高级优化功能,普通Avatar制作者可能从不需要使用此组件。
中文名称: 独立移动组件
用途: 允许您在编辑器中移动某个对象/骨骼,而不影响其子对象的位置。平时在Unity中移动父对象会连带子对象一起移动,而添加 Move Independently 后,对该父对象的位移/旋转不会传递给子级。此组件不影响运行时表现,只在调整Avatar姿态或配件对位时作为工具。
常见使用需求: 主要用于调整服装配件的穿戴位置。例如给Avatar穿一件衣服,发现衣服的髋骨位置需要稍微上移才能对齐Avatar髋骨,但直接移动髋骨会带动腿部等整个衣服移动,这时用 Move Independently 就可以仅移动衣服的髋骨而不拖动衣服腿部。同理,在调整饰品、道具的位置时,如果它有子物体不想一起动,就可以暂时用这个组件来独立移动父物体进行微调。它还支持勾选“一起移动的对象”来成组移动(例如同时移动髋骨和大腿骨,但不动小腿骨)。
典型应用场景: 例如您给Avatar添加一双长靴,但靴子的模型比Avatar脚稍低,想提起靴子而不改变Avatar脚的位置。您可在靴子根物体上加 Move Independently,然后使用移动工具上移靴子,这样靴子的子骨骼(脚掌、脚趾)相对位置不变,但整个靴子模型在Avatar脚上提拉了。再比如给Avatar戴帽子,发现帽子偏斜,使用 Move Independently 调整帽子根节点旋转,可以转正帽子而不会影响帽子上的装饰物相对位置。注意: 如需对父对象进行非等比缩放调整,应结合 Scale Adjuster 使用,因为 Move Independently 对非均匀缩放支持有限。
中文名称: 参数组件
用途: 定义预制件所需的 Animator 参数,并避免与Avatar现有参数冲突。通过 MA Parameters,您可以罗列出该预制件用到的每个参数名、类型(布尔、整数、浮点)以及默认值、同步类型等。构建时,组件会自动重命名参数以防重名,并将这些参数添加到Avatar的Expressions参数列表中(或作为Animator内部参数)。
常见使用需求: 当您的预制件需要使用自定义参数(非VRChat内置参数)来驱动动画或菜单开关时,一定要使用本组件。例如一个预制件新增了MagicFireball触发参数、LaserIntensity浮点参数等,都应在 MA Parameters 中声明。这样合并进Avatar时,这些参数会自动加入Expressions参数表并分配唯一名称,避免多个预制件间同名冲突。甚至 PhysBone 的参数前缀也可在这里设定(类型选PB Prefix),使PhysBone参数不冲突。总之,凡是预制件引入的新参数,都通过该组件集中管理。
典型应用场景: 比如一个尾巴预制件需要参数TailWagSpeed控制尾巴摇动速度。您在预制件的 Parameters 组件中添加此参数,类型Float并设默认值。当不同用户将该预制件合并到他们的Avatar上时,这个参数会被自动添加且改名(如添加前缀)以免与Avatar已有参数冲突。再比如一个道具预制件有开关参数PropVisible,如果多个不同预制件都有PropVisible,MA会给各自参数改名(如PropVisible_1, PropVisible_2)使其互不影响。利用 Parameters 组件,预制件作者和用户都无需手动编辑Expressions参数资产。
中文名称: 物理骨骼阻断组件
用途: 阻止父对象上的 PhysBone(物理骨骼链)对该子对象产生物理影响。工作原理是:构建时将这个子对象添加到父级 PhysBone 组件的忽略列表中。这样父骨骼以上的抖动/摆动到此子物体为止被“阻断”,从而子物体保持静止或独立运动。
常见使用需求: 当您把一个物体附加到Avatar某个有 PhysBone 动态效果的骨骼上,但又不希望该物体跟着一起晃动时,就需要这个组件。常见例如:在有物理摆动的尾巴骨骼末端加一个饰品,如果不阻断,饰品会随尾巴摆动而乱晃;阻断后饰品将刚性附着在尾巴末端。又如在动态头发骨骼上挂一个道具,希望道具不随头发摆动,也可使用 PhysBone Blocker。值得一提的是,即使阻断父链,您仍可在子物体上添加新的 PhysBone,使其有独立的物理效果。
典型应用场景: 例如Avatar有一条会甩动的长尾巴(PhysBone组件控制)。您给尾巴末端附加一个铃铛模型,不希望铃铛也跟着甩动。此时在铃铛对象上添加 PhysBone Blocker,构建后尾巴的PhysBone会忽略铃铛,这样铃铛将稳稳地挂在尾巴尖,不受尾巴物理晃动影响。再比如通过 Bone Proxy 把某物体附到了有PhysBone的骨骼里,为防止该物体被PhysBone继续驱动,通常会在同一对象加上 PhysBone Blocker。这个组合确保物体牢固附着且没有多余晃动。
中文名称: 移除顶点色组件
用途: 将所附加对象及其子层级中所有网格的顶点颜色去除。这在构建Avatar时以非破坏性方式进行,模型原文件不变,但导出到VRChat时顶点色被剥离。通过移除顶点色,可以避免某些着色器受到模型残留顶点色的干扰。
常见使用需求: 当导入的模型自带顶点颜色且并非用于最终显示时,需要用此组件清除它们。特别是在使用VRChat移动端标准着色器时,顶点色会参与明暗计算,若模型有隐藏的顶点色可能导致颜色异常(例如头发泛黑、服装发灰等现象)。以往需要在3D建模软件中手动删除顶点色,现在添加 Remove Vertex Color 组件即可在上传时自动去除。您还可以将它加在Avatar根节点,一次移除整只Avatar的所有顶点色;如果某部分想保留顶点色,可在那部分再加一个Remove Vertex Color组件并将模式设为“保留顶点色”,可排除在全局移除之外。
典型应用场景: 例如导入的Avatar头发模型原本来自游戏,带有用于游戏光照的顶点染色,结果在VRChat里使用移动Shader导致头发颜色不对。在头发对象上添加 Remove Vertex Color 后,构建出的Avatar头发将不含顶点色渲染,颜色恢复正常。又如一件衣服在Unity中看起来正常,但换成Mobile Diffuse着色后变黑了,可能就是顶点色的问题。给衣服根物体加该组件即可解决,无需重新导出模型。
中文名称: 替换对象组件
用途: 用预制件中的一个对象完全取代Avatar原有的某个对象。构建时,目标对象将被移除,由预制件提供的对象连同其子层级一起顶替到Avatar对应位置。原目标对象的子物体会与新对象的子物体一并保留到新对象下。此外,该组件还会自动更新Animator中引用旧对象的动画路径,指向新对象。
常见使用需求: 当您需要彻底覆盖Avatar的某部分而不是添加时使用。例如替换Avatar的默认身体网格为预制件提供的新身体,或者替换Avatar某骨骼下挂载的一整串物体(比如整条尾巴)。因为是完全替换,一个Avatar的某个对象只能被一个预制件替换一次,所以如果多个预制件想替换同一对象会冲突。因此 Replace Object 更适合“一对一”的特定改造,使用时需考虑与其他资产的兼容性。
典型应用场景: 例如Avatar原本的“Head(头部)”物体是一张默认脸,您想换成另一张脸模型预制件。可以在预制件的脸模型上添加 Replace Object,目标设为Avatar的Head,构建后Avatar的头将完全被新脸模型替换。原Head下的子物体(如表情骨骼)和新脸模型的子物体都会统一保留到新脸下。再如您想用预制件的自定义 PhysBone 设置替换Avatar身上的原PhysBone,只需将 Replace Object 指向那个PhysBone对象即可实现。注意: 由于名字不会自动改成原对象名,替换后对象名称可能不同,但一般影响不大(除非特定用途如MMD世界兼容性期待某名字)。总之,Replace Object 提供了一种强力但需谨慎使用的覆盖手段。
中文名称: 缩放调整组件
用途: 允许您调整特定骨骼在X/Y/Z轴的缩放,而不会扭曲其旋转后的子骨骼。该组件拦截Unity缩放工具,使对骨骼的非均匀缩放仅作用于该骨骼自身,不产生对子骨骼的畸变。用于在编辑器中微调骨骼长度/粗细以适配装备。
常见使用需求: 拟人Avatar服装的尺寸微调。当衣服或配件并非专门为Avatar尺寸制作时,可通过Scale Adjuster对骨骼进行细微缩放使之契合。例如衣服袖子稍短,可以沿手臂骨骼的Y轴拉长一点;若直接缩放骨骼可能导致手部子骨骼朝向改变后产生错位,而使用Scale Adjuster则不会。一般当需要对骨骼进行非等比缩放(例如仅加长、不加粗)时使用。如果只是整体放大/缩小(XYZ等比),直接用Unity缩放即可,无需本组件。
典型应用场景: 例如给Avatar穿一条裤子,发现裤腿略短露出脚踝。可在左右小腿骨骼上加 Scale Adjuster,然后选中缩放工具拉伸骨骼Y轴,观察裤腿长度变长而脚部位置不变,从而裤子盖住脚踝且不影响脚的朝向。又如调整肩宽,让外套更合身,可以在锁骨骨骼上使用Scale Adjuster,轻微放大X轴比例,肩膀变宽而手臂子骨骼姿势不受影响。注意: 若对多个骨骼一起缩放,可在每个骨骼加Scale Adjuster并多选同时缩放,但若它们有旋转,结果可能不完全精确。缩放调整只在编辑器起作用,运行时不会额外消耗。
中文名称: 同步参数序列组件
用途: 确保当同一个Avatar分别上传到PC和Quest平台时,其Expressions参数列表的前若干参数顺序和配置一致。VRChat要求跨平台Avatar共享的参数必须在参数列表开头顺序相同,Sync Parameter Sequence 组件通过调整参数顺序及填充占位参数,使PC版和Quest版Avatar的参数序列对齐。
常见使用需求: 如果您计划将Avatar上传两个平台(PC和Android)且使用了自定义的同步参数(Expressions Parameters里勾选了Synced的参数),就应使用本组件。典型场景如:Avatar有多个开关希望在PC和Quest间同步状态,没有同步序列会导致不同平台参数顺序错乱,从而不同步。通过该组件,您在两个Unity工程的同一Avatar上都添加它,并共享一个参数序列资产文件。上传流程通常先上传主要平台(如Quest),组件会记录参数顺序;再上传次要平台(如PC),组件会根据记录自动重排参数顺序并添加必要的虚拟参数以匹配主要平台。
典型应用场景: 例如Avatar有一个名为“WingsToggle”的同步参数,用于PC和Quest版同时控制翅膀开关。如果不特别处理,可能PC版参数列表顺序与Quest版不一致,导致在PC打开翅膀时Quest端看不到变化。通过在Avatar上添加 Sync Parameter Sequence,点击“New”创建序列资产,并在另一版本Avatar上引用同一资产。上传Quest(主平台)后再上传PC,组件会确保两个版本的参数列表都以相同顺序包含“WingsToggle”等参数,这样两个平台间翅膀开关状态就能实时同步。需要注意的是,该组件可能与某些第三方参数工具(如VRCFury的Parameter Compressor)存在兼容性问题。
中文名称: 头部附件可见组件
用途: 使附加在头部骨骼下的某个物体在第一人称视角下可见。VRChat默认会隐藏Avatar头骨及其子物体以避免玩家视野被模型遮挡,但有时玩家希望看见自己头上的配件(头发、帽子等)。添加 Visible Head Accessory 后,被标记的物体将不受头部隐藏影响,并进行必要的模型调整防止裁剪穿模。
常见使用需求: 当您希望Avatar佩戴的头部装饰在本人视角中能看到时使用。例如很多Avatar的刘海、帽子在第一人称是被裁掉的,如果想看到自己的刘海,给刘海物体加该组件即可。需要注意,本组件不能直接加在PhysBone链条的子物体上(如果头发有物理骨骼,可在PhysBone父物体上加),且不建议对头部所有子物体都启用,否则可能自遮挡严重。通常挑选重要的几件配饰使用此组件。
典型应用场景: 例如Avatar有一顶鸭舌帽,默认第一人称看不见帽檐,加上 Visible Head Accessory 后,帽檐将对自己可见,不用照镜子也能看到帽子。又如有的玩家喜欢在第一人称看到自己的发梢,给头发末端物体添加此组件即可。不过要防止出现半截三角形贴脸的情况,本组件内部通过侦测部分顶点属于隐藏骨骼、部分属于可见骨骼的三角形,并重映射权重来解决裁剪穿模。因此相较直接使用VRCHeadBone显示,该组件能提供更好的视觉效果。
中文名称: VRChat设置组件
用途: 配置Avatar在VRChat中的一些全局特殊行为开关。一个Avatar只能有一个此组件,若未添加则使用默认设置。目前提供的选项包括 “MMD World Support”(MMD世界支持):控制是否启用针对MMD地图的特殊Animator层处理。未来可能扩展更多VRChat专有设置。
常见使用需求: 通常很少手动使用,除非您明确想更改某项VRChat默认行为。例如您不希望Avatar在MMD地图中自动禁用面部表情动画,可以添加本组件并关闭“MMD World Support”选项。默认情况下,Modular Avatar 已将MMD支持开启(没有该组件时视为启用默认支持),因此只有在您要取消或调整此类行为时才需要用到它。简单来说,VRChat Settings 提供了一处界面来统筹控制这些特殊设置,方便高级用户调整。
典型应用场景: 例如Avatar有自定义的四五层FX动画,如果进入MMD世界默认会禁用其中两层。但这个Avatar的制作者希望即使在MMD地图里也完整保持这些动画,就可以在Avatar上添加 VRChat Settings 组件并将“MMD世界支持”选项关闭,确保任何世界都不会改动Avatar的Animator层。又或者相反,有人发现MMD世界的自动处理有Bug,想彻底禁用这项功能,也可通过本组件实现。由于目前设置项较少,所以大部分用户用不到它,但拥有它可以更透明地控制Avatar在VRChat中的特殊表现。
中文名称: 世界固定物体组件
用途: 使一个物体保持相对于世界坐标固定不动,即Avatar移动时该物体留在原世界位置。实现方式是构建时在Avatar根部生成一个与世界原点固定的隐含对象,并将带组件的对象重定位到该隐含对象下,从而令其脱离Avatar移动影响。多个 World Fixed Object 会共用同一个世界固定参照(不会重复生成多个,性能开销不随数量增加)。
常见使用需求: 当您希望Avatar产生的某些道具或效果留在原地而不是跟随Avatar移动时使用。比如Avatar踩地板时生成的脚印,应当留在地面不会跟着脚抬起;又或者Avatar放置一个可交互物品,希望Avatar走开后物品还留在原处。这类情况都可通过 World Fixed Object 实现。需注意由于Quest平台的限制,该组件在Quest版本Avatar上不受支持(Quest不允许世界约束,所以此功能PC专用)。
典型应用场景: 例如一个“魔法阵”预制件,使用 World Fixed Object 后,当Avatar在某处激活魔法阵效果,魔法阵会固定在激活地点,Avatar走开也不会把魔法阵带走。又如Avatar有一个“放置椅子”的动画,在地上生成一把椅子,如果椅子对象用了World Fixed Object,那椅子将留在放置地点,可供其他玩家坐,而不是椅子黏在Avatar身上移动。注意: 如果您为Quest上传Avatar,需移除此组件或将相关功能设计为仅PC可用,因为Quest下它无法生效。
中文名称: 世界缩放物体组件
用途: 强制一个对象始终维持与世界相同的缩放比例(1:1),而不受Avatar整体缩放影响。本组件在构建时会给目标对象添加一个VRChat的Scale Constraint,并将其锁定为相对于世界为单位1的缩放。这样无论Avatar被放大或缩小,该对象依旧保持世界尺度大小。
常见使用需求: 当Avatar存在缩放变化(比如Avatar大小可调整,或使用Animator动态改变缩放)时,希望某些附属对象不随之缩放,可使用本组件。例如一个显示尺寸的标尺、激光尺等,应始终以真实世界尺寸显示;又或者一个Avatar可以变巨人,但手持的道具想保持正常人尺寸,这种需求就需要World Scale Object。此组件通常用于高级约束玩法,保证某些物件维持绝对尺寸。
典型应用场景: 例如Avatar有个魔法法阵环绕在脚下,当Avatar变大两倍时,法阵如果跟着放大可能显得不合理。给法阵物体添加 World Scale Object 后,Avatar无论大小如何变化,法阵都保持统一尺寸,看起来大小恒定。再如Avatar可以变小进入微缩场景,但想让其头顶的名字字牌不变得太小看不见,也可以用World Scale Object让名字板保持世界大小。这组件在编辑器中不会实时预览效果,但在游戏中或播放模式下能正确工作。
中文名称: 对象开关组件
用途: 根据当前物体(挂有此组件的物体)的激活/禁用状态,自动切换一个或多个其他目标对象的激活状态。简单来说,当控制对象被启用或关闭时,Object Toggle 会相应地启用或关闭预设的一批对象。它属于反应式组件的一种。
常见使用需求: 用于在Avatar局部对象之间建立联动显隐关系,无需编写动画。典型场景是当一个物件出现时隐藏另一个冲突物件。例如穿上某件服装时,需要禁用与之重叠的身体或内衣网格,这就可通过Object Toggle实现。再如开启某特效时,为防止重复,可自动关闭另一个特效。使用时在控制对象上添加组件,列出受控目标对象并勾选目标希望呈现的状态(启用或禁用)。这样控制对象Active为真时,目标对象按设定启用/停用;控制对象Inactive时则反向操作。
典型应用场景: 例如Avatar有一件“外套”和一件“T恤”可互换,当外套对象激活时应隐藏T恤,用 Object Toggle 挂在外套上,目标设置为T恤对象并选择“禁用”。这样玩家在菜单中启用外套时,T恤会自动关闭避免穿模;当外套关闭时,T恤则重新启用。又如Avatar有两个不同样式的发型对象,通过在一个发型上添加Object Toggle来禁用另一发型,可以在切换发型时自动隐藏之前的发型,无需动画过渡。
中文名称: 材质更换组件
用途: 当其所在对象被启用时,自动将指定渲染器的材质替换为预设的另一套材质(对象禁用时可选反向替换)。Material Setter 属于反应式组件,通常与菜单开关或物体显隐联动使用。
常见使用需求: 用于动态切换材质/纹理的情形,避免手动制作动画来回切材质。例如Avatar有白天/夜晚两种材质效果,通过一个开关启用 Material Setter 来更换材质。又或者玩家启用“Stealth隐形模式”时,将Avatar的材质换成半透明Shader。将Material Setter挂在对应的Menu Item或控制对象上,配置好目标Renderer、材质槽位以及要切换的新材质。默认当对象激活时进行材质替换,如果希望在对象关闭时替换,则勾选“反转条件”。
典型应用场景: 例如Avatar有一件外套可以变色,添加 Material Setter 在表示“外套变色”开启的物体上,指定外套的Renderer和对应材质槽,新材质设为另一颜色纹理。这样当玩家触发变色开关时,Material Setter 自动把外套材质换成新颜色,无需为变色制作动画。再如一个“能量护盾”特效,启动时需要所有材质切换为发光版本,也可以用Material Setter对相关Renderer替换材质,实现一键切换多个部分的Shader。
中文名称: 形状键修改组件
用途: 当其所在物体被启用时,修改Avatar上另一目标Renderer的一个或多个Blendshape(形状键)数值。通常用于缩小或隐藏模型的特定部分:通过驱动目标网格的形状键,使某部分顶点收缩到看不见或改变形状。Shape Changer 属于反应式组件。
常见使用需求: 服装搭配消隐。主要用于当穿上某件衣服时,让Avatar本体的相应部位形状键触发,以隐藏被衣服遮挡的身体部分。例如穿上长裙时触发“隐藏腿部”blendshape,把腿缩进体内避免穿模;穿上窄胸甲时触发“平胸”blendshape,避免身体凸出服装。这些操作用Shape Changer可自动完成,而不必手动设置动画。应避免对那些已被动画驱动的Blendshape使用Shape Changer,以防冲突(此情况下可改为通过Object Toggle启用/禁用带Shape Changer的物体本身,从而间接控制)。
典型应用场景: 例如给Avatar添加一件宽大的斗篷,斗篷盖住了背包和翅膀。当斗篷对象激活时,通过 Shape Changer 让Avatar背上的翅膀网格的“收起”Blendshape值设为1,把翅膀压平贴背,从而斗篷外不露翅膀。当斗篷关闭时Blendshape恢复0,翅膀正常展开。又如给Avatar戴上面具,需要隐藏原有面部表情模型,可以在面具对象上用Shape Changer把脸部模型的“隐藏”形状键启用,使脸变透明。同样地,这些操作玩家不需要操心,预制件会根据物件开关自动调整Avatar形状键达到最佳视觉效果。