# 脚本
# 自身跳MMD舞蹈
(Animator Locomotion Control)
## 一、文件准备
- 舞蹈动画文件
- 音乐
关于MMD舞蹈转换,请参考:[固定世界MMD](https://vrchat.yexca.net/#/additional/set_MMD)
不过这里要调整动画方向,点击动画文件,在右方”跟变换旋转-依据“选择”原始“
## 二、制作音乐开关
### 1)压缩音频
点击音频文件,在右方选择压缩格式(一般默认的”Vorbis“即可),选择质量(越低压缩率越高),然后点击应用即可
### 2)加入音频
在模型上创建一个空物体,然后添加组件”音频源“(英文: Audio Source)
在”AudioClip“后方拖入音乐,”空间混合“调为”1“,”多普勒级别“调为”0“,”音量衰减“选”线性衰减“,”最大距离“可自由调节(例如20)
### 3)音频邦骨(可选)
我制作一般会将音频邦骨在嘴部,邦骨参考:[物体绑骨](https://vrchat.yexca.net/#/additional/tied_bones)
### 4)制作音频开关
录制开关参考:[FX层-物品开关](https://vrchat.yexca.net/#/editing/switch)
## 三、动画器添加动画
### Action层
进入Action层,跟随“Entry-WaitForActionOrAFK-Prepare Standing”,“Prepare Standing”后连接八个过渡,任选一个过渡后的状态,将“Motion”替换为舞蹈动画
然后添加组件“Animator Locomotion Control”,将“Locomotion Control”设置为“Disable”,如果不设置游戏中转动或移动时模型也会动
检查前后过渡是否正确,是否有相应条件(如前面为“VRCEmote”等于“1”,后面为“VRCEmote”不等于“1”)并且是否将退出时间关闭
在下一个状态(“BlendOut Stand”)添加组件“Animator Locomotion Control”,将“Locomotion Control”设置为“Enable”,如果不设置游戏里再也无法移动或转动视角
### FX层
进入FX层,在参数添加“Int”型参数,命名为“VRCEmote”
创建一个层,音乐打开的条件为刚刚Action层进入舞蹈的条件(例如“VRCEmote”等于“1”),关闭的条件为刚刚Action层退出舞蹈的条件(例如“VRCEmote”不等于“1”),将退出时间关闭
## 四、设置数值与菜单
### 数值
默认的数值第一个就是“VRCEmote”,如果没有请添加,类型为“Int”
### 菜单
菜单添加一项,“类型”为“Toggle”,“Parameter”为“VRCEmote”,数值为在Action层条件(例如“1”)
# 随机播放音乐
(Avatar Parameter Driver)
## 一、准备文件
已经录好开关音频的动画文件,可参考:[自身跳MMD舞蹈](https://vrchat.yexca.net/#/script/self_MMD?id=%e4%ba%8c%e3%80%81%e5%88%b6%e4%bd%9c%e9%9f%b3%e4%b9%90%e5%bc%80%e5%85%b3)
## 二、参数
参数 | 动画器(FX层) | 数值 | 描述 |
开关(Bool) 例如“Music\_Start” | 添加 | 添加 | 控制随机播放开关 |
选择歌曲(Int) 例如”Music” | 添加 | 可选(如果添加可在游戏显示 当前播放歌曲和切换下一首) | 控制选择的歌曲 |
## 三、图层
参加参数后,新建一个图层,重命名后权重设为1,如下图所示
[](https://docs.vrcd.org.cn/uploads/images/gallery/2024-04/fHnBja7ndKgkAOmM-image.png)
## 四、菜单
在VRC数值中添加参数后制作菜单
### 1)如果只是做一个开关
只需要添加一个“Toggle”,参数为“Music\_Start”即可
### 2)游戏中显示当前播放歌曲
建议做一个子菜单
先添加一个开关,即添加一个“Toggle”,参数为“Music\_Start”
然后再添加几个(歌曲数量)“Toggle”,参数为“Music”,值为图层中对应条件
### 3)添加下一首
其实做了游戏中显示当前播放歌曲后在游戏中点击任意歌曲即可切换
所以可以添加一个“Toggle”,参数为“Music”,值为“0”或者其他都行
## 五、其他
利用此脚本也可以实现顺序播放,倒序播放等
也可以做一个招式(动画)的随机语音
# 顺序播放音乐
(Avatar Parameter Driver)
## 一、准备文件
已经录好开关音频的动画文件,可参考:[自身跳MMD舞蹈](https://vrchat.yexca.net/#/script/self_MMD?id=%e4%ba%8c%e3%80%81%e5%88%b6%e4%bd%9c%e9%9f%b3%e4%b9%90%e5%bc%80%e5%85%b3)
## 二、参数
参数 | 动画器(FX层) | 数值 | 描述 |
开关(Bool) 例如“Music\_Start” | 添加 | 添加 | 控制随机播放开关 |
选择歌曲(Int) 例如”Music” | 添加 | 可选(如果添加可在游戏显示当前播放歌曲) | 控制选择的歌曲 |
下一首(Bool) 例如“Next” | 可选 | 可选(如果添加可控制播放下一首) | 控制播放下一首 |
## 三、图层
参加参数后,新建一个图层,重命名后权重设为1,如下图所示
[](https://docs.vrcd.org.cn/uploads/images/gallery/2024-04/8GMd5XZUc2QdR0wm-image.png)
## 四、菜单
在VRC数值中添加参数后制作菜单
### 1)如果只是做一个开关
只需要添加一个“Toggle”,参数为“Music\_Start”即可
### 2)游戏中显示当前播放歌曲
建议做一个子菜单
先添加一个开关,即添加一个“Toggle”,参数为“Music\_Start”
然后再添加几个(歌曲数量)“Toggle”,参数为“Music”,值为图层中对应条件
### 3)添加下一首
添加一个“Button”,参数为“Next”
# 出场动画
## 特效
可以寻找一些现成的特效使用
### 特效处理
注意特效不能包含脚本(script)组件,如果有需要删除
如果删除脚本后特效变成不想要的样子了那只能换一个了
因为VRChat不允许上传脚本文件
### 实装
将特效的循环(Looping)关闭放在模型上上传即可
## 物品
可能有一些会转来转去的物品作为出场?当然,特效也适用此方法
### 动画
将物体隐藏,然后录制一个物体的打开动画
### FX层
创建一个新图层,权重设为1
拖入动画作为默认动画
然后创建一个空状态,创建过渡,设置退出时间,时间长度自定(时间单位:上一状态动画长度,如为物体打开动画/空动画可当成以秒为单位)
## 动画的时间
可以通过查看动画的帧数来确定,Unity默认为1秒60帧
例如一动画一共240帧,则该动画为4秒
## 动作
因切换到该模型时会执行追踪器重置?所以理论上应该不能做成出场动作动画,不过可以通过其他方式实现。注:个人理解
### 动画
首先准备动作动画,然后录制一个模型隐藏的动画,即将模型的材质(Mesh)全部隐藏
### Action层
#### 参数
创建一个Bool型参数,例如`Start`
#### 过渡
从`WaitForActionOrAFK`到`Prepare Standing`,条件为`Start`为`true`,取消勾选`退出时间(Has Exit Time)`
#### 动作动画
拖入动作动画,创建过渡`Prepare Standing`-`动作动画`-`BlendOut Stand`
#### 过渡条件
`Prepare Standing`-`动作动画`:`Start`为`true`,无退出时间
`动作动画`-`BlendOut Stand`:有退出时间,为1,无条件
#### 脚本
在状态`BlendOut Stand`添加`VRC Avatar Parmeter Driver`,将参数`Start`设为`false`
### FX层
#### 参数
创建一个Bool型参数,名字与刚刚在Action层创建的一致,例如`Start`
#### 图层
新建图层,权重设为1
以下`Default`与`Hide`状态对应的动画为录制的模型隐藏动画,`Start`为空状态
图层结构:`Entry`-`Default`-`Hide`-`Start`
#### 过渡
`Default`-`Hide`:无条件,有退出时间,为0.1
`Hide`-`Start`:无条件,有退出时间,为0.2
#### 脚本
在状态`Hide`添加`VRC Avatar Parmeter Driver`,将参数`Start`设为`true`
#### 解释
`Default`-`Hide`的过渡时间是等待模型重设追踪器完成
`Hide`-`Start`的过渡时间是模型从站立到动作动画的起始动画需要时间,可自行调整时间大小