KT Studio 开发记录(其它)

本文记录了我在 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. 非线性速度条

  • 采用非线性速度控制条,在中心值附近变化较为缓慢,方便微调;首尾两端变化剧烈,方便产生变速效果。