# 注意

这篇文章不会讨论人物模型怎么获得,请确保您手上已有可用的人形 (humanoid) 模型可用再继续向下阅读。

# 前期准备 (跳至下节)

# 模组安装

显然原版 Beat Saber 并不支持导入自定义人物模型,所以我们需要安装 Custom Avatar 模组。

最简单的方式就是打开 Mod Assistant,勾选 Custom Avatar ,然后按 Install or Update

安装 Custom Avatar 模组

# 下载模板项目文件

打开 Custom Avatar 模组的 Github Release 页面 下载 BeatSaberCustomAvatars-版本号-UnityProject.zip

下载模板项目文件

将 zip 文件解压到任意位置。打开 Unity Hub 并导入项目文件夹。

# 下载对应版本的 Unity Editor (如编辑器未缺失可点击跳至下节)

打开项目,此时 Unity Hub 会提示项目使用了未安装的编辑器版本。此处是 2019.3.15f1 ,我们需要使用尽可能相近的版本打开项目。

未安装的编辑器版本

前往 Unity Archive,找到对应的版本,点击 Unity Hub 按钮。

Unity Archive 页面

回到 Unity Hub,直接点击安装,开始下载 Unity Editor。

下载 Unity Editor

复制库文件

打开游戏目录文件夹(打开 Steam,右键游戏 > 管理 > 浏览本地文件;Oculus 版请自行 Google),打开 Beat Saber_Data/Managed/ 文件夹,复制 DynamicBone.dllFinalIK.dll 两个文件

复制库文件

到之前下载的 Custom Avatar 模板项目文件夹 Assets/Library/ 文件夹。

复制到目标文件夹

回到 Unity Hub 打开项目,取决于你拥有的模型的不同

  • .fbx 拖入 Unity Editor 窗口
  • 双击 .unitypackage 设置导入选项
    • 如果你的模型有 Dynamic Bone 对应,最好也预先导入 Dynamic Bone 脚本
  • 使用 UniVRM 导入 .vrm 模型
  • 等等

具体如何导入请咨询模型作者、查询脚本文档等。

导入模型

模型处理

# 修补 VRChat 模型与添加 Dynamic Bone(其他模型所有者及不需 Dynamic Bone 者可按这里跳过)

点击导入的 VRChat 人物的 prefab,在 Inspector 将两个丢失的脚本删除。这两个脚本是 VRChat 用来识别人物数据的,在 Beat Saber 中无用。

删除 missing scripts

展开左侧 Hierarchy 中的人物,找到拥有 Dynamic Bone 的骨骼。右键 Copy Component 复制组件。

copy component

点击 Add Component 添加组件,搜索 Dynamic Bone,添加 Beat Saber 版的 Dynamic Bone 组件。(可以用名字前的 # 或是 C# 区分,至少在我这里是这样)

add component

添加完成后右键 C# Dynamic Bone,点击 Paste Component Value,粘贴参数或自行调整参数。右键 # Dynamic Bone,点击 Remove Component 删除组件。如果骨骼同时拥有 Dynamic Bone Collider,以同样步骤添加 C# Dynamic Bone Collider 进行替换。

paste component values

将此步骤重复直至全部拥有 Dynamic Bone 或 Dynamic Bone Collider 的骨骼全部替换完毕。

修复 Shader

Beat Saber 只支持自家 shader,如果使用 UTS 这些会导致模型在游戏中变成纯白色(虽然但是如果你萌全白那也不是不行)。

show UTS

点击切换 shader 搜索 Unlit Glow (理论上任何在 BeatSaber/ 里的 shader 都能用,但是我没测试过)。

search for Unlit Glow

跟其他 shader 一样,给 Unlit Glow 加上贴图

add texture

注意:如果材质有透明部分的话需要使用 Unlit Glow Cutout Dithered ,不然像胖次的花边这样的地方就会有黑色背景。

pantsu

# 添加骨骼绑定

# 添加空物体与调整模型大小

将模型拖入 Hierarchy,在 Hierarchy 里右键点击 Create Empty 创建八个空物体,分别命名为 角色名BodyHeadLeftHandRightHandPelvisLeftLegRightLeg (后三个仅全身追踪需要)

添加空物体

创建一个 Cube 正方体,将 Y 轴的 scale 缩放设置为人体高度(约为 1.7),X、Y 轴保持为 1;将 Y 轴 position 位置设置为 scale 的一半(这里是 0.85),X、Z 轴保持为 0。

Cube dimensions

将模型的 X、Y、Z 轴 position 位置均调整至 0,

model dimensions

调整模型 scale 缩放直至与长方体差不多大

resize model

此时可以删除或隐藏长方体。

# 调整空物体

角色名Body 两个空物体的 position 位置全部设置为 0。并把 Head (头)、 LeftHand (左手)、 RightHand (右手)、 Pelvis (骨盆)、 LeftLeg (左腿)、 RightLeg (右腿)分别放到模型的对应位置。

Head 物体需要放置在眼部,就是你想要进入游戏第一人称时摄像机放在哪。

head

手部的空物体需要一定的旋转,这个对于每个模型可能有不同,可以先参考我的然后在游戏内看了效果过后再调整。

leftHand

rightHand

PelvisLeftLegRightLeg 这三个空物体需要放在全身追踪 tracker 对应的身体部位(不过我没有全身追踪的 tracker 所以我也没法测试具体有什么影响;之前测试过用 Oculus Rift 来全身追踪,但是在我这里极其不稳定导致没有什么实用价值)。

pelvis

leg

将模型和其他七个空物体拖入 角色名 空物体中,成为它的子物体。

拖入空物体

# 创建 Target

找到上述六个身体部位在模型里的骨骼,右键骨骼点击 Create Empty 创建空物体。这一步是为了创建一个与骨骼位置完全相同的空物体。

创建空物体

将这个空物体命名为 对应部位Target ,即 HeadTargetLeftHandTargetRightHandTargetPelvisTargetLeftLegTargetRightLegTarget 。并拖到之前创建的 对应部位 空物体中。

拖入对应部位空物体

# 设置 VR 追踪

点击模型物体,在 Inspector 里点击 Add Component 添加 VRIK Manager 组件。

设置 VRIK Manager

对于需要全身追踪的模型,取消勾选 Plant Feet。

取消勾选 plant feet

在下面 SpineHead TargetPelvis TargetLeft HandRight HandLeft LegRight Leg 里的 Target 分别设置为之前创建的 对应部位Target 物体。

设置Target

设置Target1

设置Target2

设置Target3

设置Target4

# 准备导出

# 设置角色

点击 角色名 空物体,点击 Add Component 添加两个组件:Avatar Descriptor 和 First Person Exclusion。

# Avatar Descriptor

Name(名字)、Author(作者)按照自己喜欢来填写

设置角色

# 注意

这篇文章不会讨论人物模型怎么获得,请确保您手上已有可用的人形 (humanoid) 模型可用再继续向下阅读。

# 前期准备 (跳至下节)

# 模组安装

显然原版 Beat Saber 并不支持导入自定义人物模型,所以我们需要安装 Custom Avatar 模组。

最简单的方式就是打开 Mod Assistant,勾选 Custom Avatar ,然后按 Install or Update

安装 Custom Avatar 模组

# 下载模板项目文件

打开 Custom Avatar 模组的 Github Release 页面 下载 BeatSaberCustomAvatars-版本号-UnityProject.zip

下载模板项目文件

将 zip 文件解压到任意位置。打开 Unity Hub 并导入项目文件夹。

# 下载对应版本的 Unity Editor (如编辑器未缺失可点击跳至下节)

打开项目,此时 Unity Hub 会提示项目使用了未安装的编辑器版本。此处是 2019.3.15f1 ,我们需要使用尽可能相近的版本打开项目。

未安装的编辑器版本

前往 Unity Archive,找到对应的版本,点击 Unity Hub 按钮。

Unity Archive 页面

回到 Unity Hub,直接点击安装,开始下载 Unity Editor。

下载 Unity Editor

复制库文件

打开游戏目录文件夹(打开 Steam,右键游戏 > 管理 > 浏览本地文件;Oculus 版请自行 Google),打开 Beat Saber_Data/Managed/ 文件夹,复制 DynamicBone.dllFinalIK.dll 两个文件

复制库文件

到之前下载的 Custom Avatar 模板项目文件夹 Assets/Library/ 文件夹。

复制到目标文件夹

回到 Unity Hub 打开项目,取决于你拥有的模型的不同

  • .fbx 拖入 Unity Editor 窗口
  • 双击 .unitypackage 设置导入选项
    • 如果你的模型有 Dynamic Bone 对应,最好也预先导入 Dynamic Bone 脚本
  • 使用 UniVRM 导入 .vrm 模型
  • 等等

具体如何导入请咨询模型作者、查询脚本文档等。

导入模型

模型处理

# 修补 VRChat 模型与添加 Dynamic Bone(其他模型所有者及不需 Dynamic Bone 者可按这里跳过)

点击导入的 VRChat 人物的 prefab,在 Inspector 将两个丢失的脚本删除。这两个脚本是 VRChat 用来识别人物数据的,在 Beat Saber 中无用。

删除 missing scripts

展开左侧 Hierarchy 中的人物,找到拥有 Dynamic Bone 的骨骼。右键 Copy Component 复制组件。

copy component

点击 Add Component 添加组件,搜索 Dynamic Bone,添加 Beat Saber 版的 Dynamic Bone 组件。(可以用名字前的 # 或是 C# 区分,至少在我这里是这样)

add component

添加完成后右键 C# Dynamic Bone,点击 Paste Component Value,粘贴参数或自行调整参数。右键 # Dynamic Bone,点击 Remove Component 删除组件。如果骨骼同时拥有 Dynamic Bone Collider,以同样步骤添加 C# Dynamic Bone Collider 进行替换。

paste component values

将此步骤重复直至全部拥有 Dynamic Bone 或 Dynamic Bone Collider 的骨骼全部替换完毕。

修复 Shader

Beat Saber 只支持自家 shader,如果使用 UTS 这些会导致模型在游戏中变成纯白色(虽然但是如果你萌全白那也不是不行)。

show UTS

点击切换 shader 搜索 Unlit Glow (理论上任何在 BeatSaber/ 里的 shader 都能用,但是我没测试过)。

search for Unlit Glow

跟其他 shader 一样,给 Unlit Glow 加上贴图

add texture

注意:如果材质有透明部分的话需要使用 Unlit Glow Cutout Dithered ,不然像胖次的花边这样的地方就会有黑色背景。

pantsu

# 添加骨骼绑定

# 添加空物体与调整模型大小

将模型拖入 Hierarchy,在 Hierarchy 里右键点击 Create Empty 创建八个空物体,分别命名为 角色名BodyHeadLeftHandRightHandPelvisLeftLegRightLeg (后三个仅全身追踪需要)

添加空物体

创建一个 Cube 正方体,将 Y 轴的 scale 缩放设置为人体高度(约为 1.7),X、Y 轴保持为 1;将 Y 轴 position 位置设置为 scale 的一半(这里是 0.85),X、Z 轴保持为 0。

Cube dimensions

将模型的 X、Y、Z 轴 position 位置均调整至 0,

model dimensions

调整模型 scale 缩放直至与长方体差不多大

resize model

此时可以删除或隐藏长方体。

# 调整空物体

角色名Body 两个空物体的 position 位置全部设置为 0。并把 Head (头)、 LeftHand (左手)、 RightHand (右手)、 Pelvis (骨盆)、 LeftLeg (左腿)、 RightLeg (右腿)分别放到模型的对应位置。

Head 物体需要放置在眼部,就是你想要进入游戏第一人称时摄像机放在哪。

head

手部的空物体需要一定的旋转,这个对于每个模型可能有不同,可以先参考我的然后在游戏内看了效果过后再调整。

leftHand

rightHand

PelvisLeftLegRightLeg 这三个空物体需要放在全身追踪 tracker 对应的身体部位(不过我没有全身追踪的 tracker 所以我也没法测试具体有什么影响;之前测试过用 Oculus Rift 来全身追踪,但是在我这里极其不稳定导致没有什么实用价值)。

pelvis

leg

将模型和其他七个空物体拖入 角色名 空物体中,成为它的子物体。

拖入空物体

# 创建 Target

找到上述六个身体部位在模型里的骨骼,右键骨骼点击 Create Empty 创建空物体。这一步是为了创建一个与骨骼位置完全相同的空物体。

创建空物体

将这个空物体命名为 对应部位Target ,即 HeadTargetLeftHandTargetRightHandTargetPelvisTargetLeftLegTargetRightLegTarget 。并拖到之前创建的 对应部位 空物体中。

拖入对应部位空物体

# 设置 VR 追踪

点击模型物体,在 Inspector 里点击 Add Component 添加 VRIK Manager 组件。

设置 VRIK Manager

对于需要全身追踪的模型,取消勾选 Plant Feet。

取消勾选 plant feet

在下面 SpineHead TargetPelvis TargetLeft HandRight HandLeft LegRight Leg 里的 Target 分别设置为之前创建的 对应部位Target 物体。

设置Target

设置Target1

设置Target2

设置Target3

设置Target4

# 准备导出

# 设置角色

点击 角色名 空物体,点击 Add Component 添加两个组件:Avatar Descriptor 和 First Person Exclusion。

# Avatar Descriptor

Name(名字)、Author(作者)按照自己喜欢来填写

设置角色

填好之后找一张喜欢的正方形图片,直接拖入 assets 窗口

设置封面

点击图片,在 Inspector 里将 Texture Type 改为 Sprite (2D and UI),点击 Apply 应用。回到 角色名 空物体,在 Avatar Descriptor > Cover 选择刚刚导入的图片作为封面。

# First Person Exclusion

所有在这里的物体在第一人称下都不会显示,推荐将这几个身体部位隐藏:头、头发、耳朵(兽耳)、眼镜、发饰等头部物体(不过可能调整一下摄像机还真的能第一人称假装戴眼镜,那还挺酷的,有兴趣的可以自己试一下)。

将 Size 后的数字调整为需要隐藏的物体数量,在下面的 Element 里选择需要屏蔽的物体即可

# 导出角色

最后点击顶部菜单栏 Window > Avatar Exporter ,在弹出的窗口里确认信息无误后点击 Export 角色名即可。

打开导出窗口

将导出的 角色名.avatar 复制到 Beat Saber 游戏目录的 Custom Avatars\ 文件夹里

导出文件

# 游戏内

# 启用自定义角色

# 游戏内效果

# Bilibili

# YouTube