Files
Convention-Unity-Demo/Assets/StreamingAssets/README/Tutorial/README.md

166 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

**教程**
---
# 项目
项目的位置全部位于Unity持久化文件夹的Project文件夹内, 如C:\Users\ASUS\AppData\LocalLow\LiuBai\Murmur-Resonance-Editor\Projects
## 打开
通过Tools中的Open打开已存在的项目在打开之前总是会先关闭当前打开的项目
## 新建
通过Tools中的Create新建项目在新建之前总是会先关闭当前打开的项目
## 配置
项目文件夹内的config.json文件即为配置文件其中包含property与find两个项目
property中包含的内容是已配置的内容将会被读取并使用
find中包含的内容是被尝试读取但不存在的内容值为读取时设定的默认值
一些重要的键值如song需要在新建项目后配置
**重要:在运行时可能会触发配置文件的保存,被保存的配置与你希望的可能并不一致,所以不要尝试在项目运行时编辑该项目的配置文件**
# 初次运行
在Unity持久化文件夹中会生成Helper文件夹, 包含可调用函数的注释
下载需要的AssetBundle到StreamingAssets/AssetBundle
## AssetBundle
内置了主题包,包括但不限于环境物体与材质
## Helper
其中包含了物体可使用的函数以宏的形式展现可以删除Helper文件夹来重新生成最新的Helper内容
## CMake辅助编辑
脚本风格默认采用c++风格因此利用CMake与.h文件关联应用可以快速编写物体脚本
如在Unity持久化文件夹, 添加以下文本到CMakeLists.txt, 使用vs打开即可
```
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的头文件是父类可通过其查看其他可调用的父类成员函数
## ScriptableObject
所有类都从ScriptableObject派生了解其中的关键函数
之后便可以编写灵活的脚本以实现行为
```cpp
// 在任一ScriptableObject中设置Var变量为0,
// 此后在该脚本以及该处之后加载的子脚本都会含有Var=0的上下文
SetContext("Var", 0);
// 如在DDT中, 使用花括号包裹的正整型三元组表示时间点,
// 形式为: {该小节划分的节拍数, 小节数, 位于该小节的节拍数}
// 如在BPM=60的情况下, 下例将会被翻译为(4+1/8)*1s=4.125s
Add({8,4,1});
```
通过脚本实现模板对象
例如在
- root.cpp
- root
- TemplateLine.h(加载类型为SplineCore的脚本对象)
- TemplateLine
- ...(TemplateLine的子脚本)
- A-Anchor.h(加载类型为Anchor的脚本对象)
- B-Anchor.h(加载类型为Anchor的脚本对象)
```cpp
// A-Anchor.h
// 将自身在父脚本对象的坐标系中设置为x=-2的偏移
SetLocalPosition(-2,0,0);
// 设置上下文变量
...
// 加载
LoadSubScript(SplineCore, "TemplateLine.h")
```
```cpp
// B-Anchor.h
// 将自身在父脚本对象的坐标系中设置为x=2的偏移
SetLocalPosition(2,0,0);
// 设置上下文变量
...
// 也加载
LoadSubScript(SplineCore, "TemplateLine.h")
```
自此实现了以脚本TemplateLine.h为根的预制体