Skip to content
woctordho edited this page Oct 24, 2024 · 128 revisions

TODO List

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

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

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

适合新加入的小伙伴做的

架构

  • 把ToLua换成纯C#的Lua runtime,以方便跨平台
  • 把ToLua打成单独的包
    • 目前Nova本体依赖ToLua,生成的wrap代码依赖Nova本体,ToLua又依赖生成的wrap代码,所以需要修改生成代码的方式,让生成的wrap代码自己注册到ToLua,消除循环依赖
  • 支持给不在namespace Nova下的class生成wrap代码
  • 把Nova打成单独的包
    • 做一个比较简单的样例工程和一个比较全面的样例工程,目前的样例工程上手还是有点难

底层

  • 资源系统迁移到Addressables
  • 支持加载未打包的文件,以方便制作mod
  • 动画系统迁移到unity-tweens,或者其他更合适的包(不用DOTween是因为它的开源协议与MIT协议不兼容)
  • 多语言支持迁移到Unity的Localization
  • 支持多个场景,把DontDestroyOnLoad的东西放到NovaController下面
  • 如果有合适的方法处理Lua AST,让DialogueEntryPreprocessor通过AST而不是regex来匹配那些函数
  • 在各个平台上重新编译ToLua runtime
    • 详见 https://github.com/Lunatic-Works/tolua_runtime/tree/new
    • 需要跟上LuaJIT的最新版本
    • 以前macOS、iOS、WebGL由于不支持JIT,所以用的不是LuaJIT而是原版Lua,造成Lua脚本的某些行为不一致。但是LuaJIT其实有一个关闭JIT的模式,现在应该有办法统一用LuaJIT
      • Windows、Linux、Android已经搞定了
      • 如果搞起来太麻烦,就统一换成原版Lua
    • macOS需要支持Intel和苹果芯片,并且最好能从Windows或Linux上交叉编译
  • 适配鸿蒙系统

图形

  • 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分钟,如果有新的进度,则自动存档一次
  • 给存档加个锁,如果游戏的其他实例(比如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

  • 对话框翻页时应该有文本动画
  • 某些情况下,读取一个损坏的存档/globalSaveIdentifier不兼容的存档会使得global.nsav的文件体积变得很大
  • 播放视频时,如果玩家试图关闭游戏窗口,退出游戏的警告框会被视频挡住

已经有人在做的

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

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

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