本文记录了我在 KT Studio 里,提出并实现了什么系统需求、客户端功能、用户体验优化等等;
本文档还在施工中,请先阅读:KT Studio 开发记录(技术美术)
一、核心系统
1. 音频系统
音频导入
- 在Windows与安卓平台,借助SimpleFileLoader,实现音频的文件导入;
- 通过WebRequest+手动读取Fallback,实现WAV与MP3文件的读取。
音频控制
- 实现基础的音频控制,包括音量调节、音乐进度调节、暂停、播放、终止等等。
自动歌词
- 导入音乐后,如果没有找到缓存,则调用网易云音乐API,根据文件名搜索歌曲ID;
- 得到歌曲ID后,调用网易云音乐API搜索歌词,歌曲ID也可手动输入;
- 得到歌词后,会记录到缓存文件夹,下次导入同样音乐后直接读取;
- 音频播放时,根据解析出的歌词json,比较播放时间与歌词时间戳,实现歌词播放。
频率检测
- 划分频率范围,由对应范围的FFT数据驱动灯光与其他效果;
- 同时进行滑动平均处理,使数据变化更加平滑。
2. 动画系统
自动口型
主要流程:
- 通过Python预先生成拼音+日语五十音表,并简化为主要音节,储存到json文件;
- Unity端读取json后,生成拼音映射表备用,同时内置英文映射;
- 输入歌词文本后,首先拆分中文、日文、英文单词、大写字母,得到字词数和发音列表;
- 根据字词数,得到单个字词的发音时长,同时传入发音列表,进入动画协程;
- 动画协程中,根据发音-口型映射与发音时长,驱动BlendShape。
细节处理:
- 检测到歌词中有冒号时,判定为无效歌词;
- 单个发音的时长过大时,判定为无效歌词;
- BlendShape驱动配合Smoothdamp,单个发音时长过短则取消Smoothdamp;
基础控制
- 实现操控Animator的Speed和Progress的滑动条;
- 实现不同动画的切换;
- 角色切换时,保留当前的动画参数并应用到新角色的Animator。
Cue点
- 实现多个Cue点的记录与触发动画进度;
- 对每个Cue点自动生成对应的颜色,并在速度/进度条上标记位置。
3. 角色系统
角色切换
- 切换过程中,自动保存当前角色的动画信息,并将这些状态信息应用到新角色上。
角色换装
- 根据csv换装预设文件,实时读取并切换角色换装。
4. 场景系统
场景切换
- 默认采用即时切换,减少用户等待时间;
- 可选开启场景过渡动画。
灯光控制
- 支持对灯光的方位和高度角进行实时调整,从而根据场景氛围需求自由调节灯光效果。
- 引入自动灯光控制系统,根据场景ID读取json预设,控制灯光方向、阴影距离等。
5. 摄像机系统
基础控制
- 实现摄像机的基础移动,包括平移、旋转、缩放等,并添加重置功能;
- 为摄像机设置添加环绕模式,并且有独立的重置逻辑;
- 支持摄像机的视角跟随锁定功能,可以锁定角色头部,并设置跟随灵敏度。
6. 用户界面
界面主题
- 采用Modern UI框架,确定主题色、主题字体,并设计了一套专用英文大写字体;
- 所有UI无交互音效,避免干扰音乐播放,交互反馈通过视觉来满足。
界面优化
- 对界面元素进行布局和分类,配合可移动窗口,减少界面的复杂度;
- 所有操作均在主窗口中完成,提高沉浸感与交互效率。
二、渲染控制
1. 天空盒程序端
- 基于灯光方位实时读取Ramp图,并传入天空盒Shader。
2. 自适应后处理
- 根据灯光参数,实时适配Bloom和体积光等后处理参数。
3. 性能操控
- 通过渲染设置,操控URP Asset的参数以及Shader参数。
三、用户体验优化
1. 自动对拍
- 设计自动对拍系统,根据角色动作BPM和音乐BPM,自动同步播放速度。
2. 非线性速度条
- 采用非线性速度控制条,在中心值附近变化较为缓慢,方便微调;首尾两端变化剧烈,方便产生变速效果。