Skip to content
woctordho edited this page Jun 17, 2025 · 139 revisions

TODO List

目前我们对Nova的开发以自用为主,欢迎各位小伙伴贡献代码

有什么想做的可以直接开一个issue,做完了可以直接开一个PR

读代码的时候遇到任何问题也可以开一个issue

适合新加入的小伙伴做的

Lua runtime

  • 把ToLua换成纯C#的Lua runtime,比如MoonSharp或者Lua-CSharp,以方便跨平台
    • 把C# class绑定到Lua的代码可以复用ToLua的一部分,其他Lua runtime提供的绑定代码似乎不如ToLua那么全面
  • 把ToLua打成单独的包
    • 目前Nova本体依赖ToLua,生成的绑定代码依赖Nova本体,ToLua又依赖生成的绑定代码,所以需要修改生成代码的方式,让生成的绑定代码自己注册到ToLua,消除循环依赖
  • 支持给不在namespace Nova下的class生成绑定代码
  • 把Nova打成单独的包
    • 做一个比较简单的样例工程和一个比较全面的样例工程,目前的样例工程上手还是有点难
  • 把ToLua native plugin编译到WebGL
  • 把ToLua native plugin编译到鸿蒙系统

底层

  • 资源系统迁移到Addressables
  • 支持加载未打包的文件,以方便制作mod
  • 动画系统迁移到单独的包,比如LitMotion或者unity-tweens(不用DOTween是因为它的开源协议与MIT协议不兼容)
  • 多语言支持迁移到Unity的Localization
  • 支持多个场景,把DontDestroyOnLoad的东西放到NovaController下面
  • 如果有合适的方法处理Lua AST,让DialogueEntryPreprocessor通过AST而不是regex来匹配那些函数

图形

  • bc7enc_rdo压缩图片
  • 控制sprite生成的mesh的顶点数,比如Unity-SpriteAssist
  • 用texture streaming加载图片,以减少内存占用
  • 支持Live2D/E-mote
    • 需要一个开源的框架,比如Inochi2D或者Project AZUSA
  • 在手机和低端设备上自动降低分辨率和帧率(目前QualityManager.cs里写了一句话)
  • 动态降低帧率
    • 如果没有动画正在播放,就把帧率降低到10 FPS左右(UI的响应仍然依赖于这个帧率),可以写在QualityManager.cs之类的地方

音频

UI/UX

  • 在Windows/macOS/Linux上统一鼠标/触摸板/键盘上下键的滚动速度

比较独立的功能

  • 每隔5分钟,如果有新的进度,则自动存档一次
  • 自动/快速存档时,先根据nodeOffsetdialogueIndex找其他自动/快速存档中有没有相同的,如果有则覆盖这个存档(相当于把存档时间改成现在),没有则按LRU覆盖
    • 这样就不用担心玩家在一个地方刷自动/快速存档把其他存档位都刷掉,而且AutoSaveBookmark.cs里不用记录lastSaved
  • 给存档加个锁,如果游戏的其他实例(比如Unity Editor里的版本和build出来的版本)已经在运行,则不能运行新的实例
  • 选过的选项变色
  • 图片/音乐鉴赏的配置文件支持纯文本导入/导出
  • 音效的数量过多时,停止/减弱旧的音效(polyphony)
  • 画面左侧上下滑动调节亮度,右侧上下滑动调节音量,长按快进
    • Screen.brightness现在在所有OS都能用了吗
  • 局域网内同步存档
  • 语音收藏
    • 其实不用单独做一个语音收藏界面,可以在存档界面里加一个播放语音的按钮
  • 绿色安装模式
    • 在Windows下,可以选择把存档和设置保存在安装文件夹下,并且不往注册表里写东西
  • 没有耳机时禁止播放声音
  • macOS/Linux上可以设置窗口保持最前

文档

  • 自动生成文档(包括C#和Lua)
  • 把文档翻译成英文
  • 把教程翻译成英文

一些杂七杂八的东西

  • 加一个接口来解锁一个没到过的开始节点
  • 流程图
  • 重构一些代码,消除循环依赖
  • 重构SaveViewController,把后端功能拿出来
  • 重构LogController,把后端功能拿出来
  • 立绘鉴赏
  • 立绘裁剪支持因为max size而缩小后的图片
  • 在脚本中支持类似于姓名::表情::台词的语法
  • 重构RectTransformAnimationPropertyOpacityAnimationProperty,使其初始值的行为与其他AnimationProperty一致
  • 回跳时不一定停止所有动画
    • 如果回跳之前和之后在同一段持续动画之内,就不停止这段持续动画
  • 编辑存档的描述
  • 预加载头像
  • 预加载选项图片
  • 图片和音乐的metadata需要id
  • 文本插值支持多语言
  • Parse脚本之后检查jump_tobranch跳转到的节点存在
  • 图片鉴赏中的缩略图支持多语言
  • 优化存档体积,详见存档系统的设计
  • 第一次正常关闭log界面时,出现提示:“鼠标滚轮上滚可以打开文本回顾界面”
    • 手机上不出现
  • 目前的before_checkpointafter_dialogue代码块没什么用处,我们应该在每个代码块之后等待动画,具体来说,每条对话应该这样执行:
    1. 执行before_checkpoint代码块,anim_hold_end必须放在这里
    2. 等待对话内动画,若玩家点击则直接终止
    3. 创建checkpoint
    4. 执行default代码块,anim_hold_begin必须放在这里
    5. 添加文本
    6. 等待对话内动画和文本动画,若玩家点击则直接终止
    7. 等待玩家点击
    8. 执行after_dialogue代码块
    9. 等待对话内动画,若玩家点击则直接终止
    10. 进入下一条对话

已知的bug

  • 对话框翻页时应该有文本动画
  • 播放视频时,如果玩家试图关闭游戏窗口,退出游戏的警告框会被视频挡住
  • 存档升级时,每个NodeRecord的第一个checkpoint必须保持不变

已经有人在做的

  • 重构DialogueBoxController
    • 不要在DialogueBoxControllerRestoreData里存所有历史文本,而是像LogController一样只存需要interpolate的文本
    • 对话框可以有多个
    • 用脚本隐藏/显示对话框时有动画

已经有人做完但是还没upstream的

  • UI手柄支持(目前来看会导致改UI更麻烦)
  • 角色说话时BGM减轻(duck volume)
  • Windows上可以设置窗口保持最前
  • 把立绘差分打成atlas(目前来看对性能没有显著的改进)

Clone this wiki locally