2025-09-25 19:04:05 +08:00
|
|
|
|
**教程**
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
# 项目
|
|
|
|
|
|
|
2025-10-05 20:18:48 +08:00
|
|
|
|
项目的位置全部位于Unity持久化文件夹的Project文件夹内, 如C:\Users\ASUS\AppData\LocalLow\LiuBai\Murmur-Resonance-Editor\Projects
|
2025-09-25 19:04:05 +08:00
|
|
|
|
|
|
|
|
|
|
## 打开
|
|
|
|
|
|
|
|
|
|
|
|
通过Tools中的Open打开已存在的项目,在打开之前总是会先关闭当前打开的项目
|
|
|
|
|
|
|
|
|
|
|
|
## 新建
|
|
|
|
|
|
|
|
|
|
|
|
通过Tools中的Create新建项目,在新建之前总是会先关闭当前打开的项目
|
|
|
|
|
|
|
|
|
|
|
|
## 配置
|
|
|
|
|
|
|
|
|
|
|
|
项目文件夹内的config.json文件即为配置文件,其中包含property与find两个项目,
|
|
|
|
|
|
property中包含的内容是已配置的内容,将会被读取并使用,
|
|
|
|
|
|
find中包含的内容是被尝试读取但不存在的内容,值为读取时设定的默认值,
|
|
|
|
|
|
一些重要的键值如song需要在新建项目后配置
|
|
|
|
|
|
|
|
|
|
|
|
**重要:在运行时可能会触发配置文件的保存,被保存的配置与你希望的可能并不一致,所以不要尝试在项目运行时编辑该项目的配置文件**
|
|
|
|
|
|
|
|
|
|
|
|
# 初次运行
|
|
|
|
|
|
|
2025-10-05 20:18:48 +08:00
|
|
|
|
在Unity持久化文件夹中会生成Helper文件夹, 包含可调用函数的注释
|
|
|
|
|
|
|
|
|
|
|
|
下载需要的AssetBundle到StreamingAssets/AssetBundle
|
2025-09-25 19:04:05 +08:00
|
|
|
|
|
|
|
|
|
|
## AssetBundle
|
|
|
|
|
|
|
|
|
|
|
|
内置了主题包,包括但不限于环境物体与材质
|
|
|
|
|
|
|
|
|
|
|
|
## Helper
|
|
|
|
|
|
|
|
|
|
|
|
其中包含了物体可使用的函数,以宏的形式展现,可以删除Helper文件夹来重新生成最新的Helper内容
|
|
|
|
|
|
|
|
|
|
|
|
## CMake辅助编辑
|
|
|
|
|
|
|
2025-10-05 20:18:48 +08:00
|
|
|
|
脚本风格默认采用c++风格,因此利用CMake与.h文件关联应用可以快速编写物体脚本
|
2025-09-25 19:04:05 +08:00
|
|
|
|
|
2025-10-05 20:18:48 +08:00
|
|
|
|
如在Unity持久化文件夹, 添加以下文本到CMakeLists.txt, 使用vs打开即可
|
2025-09-25 19:04:05 +08:00
|
|
|
|
```
|
|
|
|
|
|
include_directories(Helper)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
# 快捷键
|
|
|
|
|
|
|
|
|
|
|
|
## 音频播放控制快捷键
|
|
|
|
|
|
|
|
|
|
|
|
几乎所有快捷键都需要按住LeftCtrl,下文中无特殊说明将会忽略该按键
|
|
|
|
|
|
组合快捷键中只有最后一个键被按下时才会触发,前置的键只需要处于按下的状态(包括隐藏的LeftCtrl)
|
|
|
|
|
|
|
|
|
|
|
|
### 基础播放控制
|
|
|
|
|
|
- **P**
|
|
|
|
|
|
- 功能:播放/暂停音频
|
|
|
|
|
|
- 说明:如果音频正在播放则暂停,如果已暂停则开始播放
|
|
|
|
|
|
|
|
|
|
|
|
- **S**
|
|
|
|
|
|
- 功能:停止音频播放
|
|
|
|
|
|
- 说明:停止当前播放的音频并重置播放位置
|
|
|
|
|
|
|
|
|
|
|
|
### 时间轴控制
|
|
|
|
|
|
- **鼠标滚轮**
|
|
|
|
|
|
- 功能:滚动控制播放时间
|
|
|
|
|
|
- 说明:向上滚动前进时间,向下滚动后退时间,单位为一秒
|
|
|
|
|
|
- 特性:滚轮操作时会自动暂停播放
|
|
|
|
|
|
|
|
|
|
|
|
## 项目管理快捷键
|
|
|
|
|
|
|
|
|
|
|
|
### 项目刷新与重载
|
|
|
|
|
|
- **R**
|
|
|
|
|
|
- 功能:刷新当前项目
|
|
|
|
|
|
- 说明:重新加载当前打开的项目,用于应用代码更改
|
|
|
|
|
|
- 注意:只有在项目已加载且未处于刷新状态时才能使用
|
|
|
|
|
|
|
|
|
|
|
|
### 项目关闭
|
|
|
|
|
|
- **Tab**
|
|
|
|
|
|
- 功能:关闭当前项目
|
|
|
|
|
|
- 说明:关闭当前打开的项目并返回项目选择界面
|
|
|
|
|
|
|
|
|
|
|
|
## 相机控制快捷键
|
|
|
|
|
|
|
|
|
|
|
|
### 相机重置
|
|
|
|
|
|
- **LeftShift**
|
|
|
|
|
|
- 功能:重置相机旋转为水平状态
|
|
|
|
|
|
- 说明:将场景相机的旋转重置为水平状态
|
|
|
|
|
|
|
|
|
|
|
|
- **LeftShift + Z**
|
|
|
|
|
|
- 功能:完全重置相机
|
|
|
|
|
|
- 说明:将场景相机的位置和旋转都重置为初始状态
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 界面提示
|
|
|
|
|
|
编辑器界面中的某些按钮会显示对应的快捷键提示,例如:
|
|
|
|
|
|
- "Play(P)" - 播放按钮,对应 P 键
|
|
|
|
|
|
- "Pause(P)" - 暂停按钮,对应 P 键
|
|
|
|
|
|
- "Stop(S)" - 停止按钮,对应 S 键
|
|
|
|
|
|
- "Reset Rotation(LeftShift)" - 重置旋转,对应左Shift键
|
|
|
|
|
|
- "Reset(LeftShift+Z)" - 完全重置,对应左Shift+Z组合键
|
|
|
|
|
|
|
|
|
|
|
|
这些提示可以帮助您快速记忆和使用相应的快捷键功能。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 物体脚本
|
|
|
|
|
|
|
|
|
|
|
|
项目中物体的行为被物体脚本(Script)控制,编辑脚本会更改其行为,
|
|
|
|
|
|
在项目运行时编辑,并通过更新热重载项目查看实时效果,
|
|
|
|
|
|
|
|
|
|
|
|
**重要:脚本的执行总是顺序的,先后顺序会影响实际行为**
|
|
|
|
|
|
|
|
|
|
|
|
不同的物体拥有的脚本函数请在Helper中查看
|
|
|
|
|
|
|
|
|
|
|
|
## CPP风格Helper
|
|
|
|
|
|
|
|
|
|
|
|
每个文件包含可调用的类成员函数,include的头文件是父类,可通过其查看其他可调用的父类成员函数
|
|
|
|
|
|
|
2025-10-05 20:18:48 +08:00
|
|
|
|
## ScriptableObject
|
2025-09-25 19:04:05 +08:00
|
|
|
|
|
2025-10-05 20:18:48 +08:00
|
|
|
|
所有类都从ScriptableObject派生,了解其中的关键函数,
|
|
|
|
|
|
之后便可以编写灵活的脚本以实现行为
|
2025-09-25 19:04:05 +08:00
|
|
|
|
|
|
|
|
|
|
```cpp
|
2025-10-05 20:18:48 +08:00
|
|
|
|
// 在任一ScriptableObject中设置Var变量为0,
|
|
|
|
|
|
// 此后在该脚本以及该处之后加载的子脚本都会含有Var=0的上下文
|
|
|
|
|
|
SetContext("Var", 0);
|
|
|
|
|
|
// 如在DDT中, 使用花括号包裹的正整型三元组表示时间点,
|
|
|
|
|
|
// 形式为: {该小节划分的节拍数, 小节数, 位于该小节的节拍数}
|
|
|
|
|
|
// 如在BPM=60的情况下, 下例将会被翻译为(4+1/8)*1s=4.125s
|
|
|
|
|
|
Add({8,4,1});
|
2025-09-25 19:04:05 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-10-05 20:18:48 +08:00
|
|
|
|
通过脚本实现模板对象
|
2025-09-25 19:04:05 +08:00
|
|
|
|
|
2025-10-05 20:18:48 +08:00
|
|
|
|
例如在
|
|
|
|
|
|
- root.cpp
|
|
|
|
|
|
- root
|
|
|
|
|
|
- TemplateLine.h(加载类型为SplineCore的脚本对象)
|
|
|
|
|
|
- TemplateLine
|
|
|
|
|
|
- ...(TemplateLine的子脚本)
|
|
|
|
|
|
- A-Anchor.h(加载类型为Anchor的脚本对象)
|
|
|
|
|
|
- B-Anchor.h(加载类型为Anchor的脚本对象)
|
2025-09-25 19:04:05 +08:00
|
|
|
|
|
2025-10-05 20:18:48 +08:00
|
|
|
|
```cpp
|
|
|
|
|
|
// A-Anchor.h
|
|
|
|
|
|
// 将自身在父脚本对象的坐标系中设置为x=-2的偏移
|
|
|
|
|
|
SetLocalPosition(-2,0,0);
|
|
|
|
|
|
// 设置上下文变量
|
|
|
|
|
|
...
|
|
|
|
|
|
// 加载
|
|
|
|
|
|
LoadSubScript(SplineCore, "TemplateLine.h")
|
|
|
|
|
|
```
|
2025-09-25 19:04:05 +08:00
|
|
|
|
|
2025-10-05 20:18:48 +08:00
|
|
|
|
```cpp
|
|
|
|
|
|
// B-Anchor.h
|
|
|
|
|
|
// 将自身在父脚本对象的坐标系中设置为x=2的偏移
|
|
|
|
|
|
SetLocalPosition(2,0,0);
|
|
|
|
|
|
// 设置上下文变量
|
|
|
|
|
|
...
|
|
|
|
|
|
// 也加载
|
|
|
|
|
|
LoadSubScript(SplineCore, "TemplateLine.h")
|
|
|
|
|
|
```
|
2025-09-25 19:04:05 +08:00
|
|
|
|
|
2025-10-05 20:18:48 +08:00
|
|
|
|
自此实现了以脚本TemplateLine.h为根的预制体
|