Skip to content
HinataYokiPublic

About

YokiFrame 是一个 C# 游戏框架 默认提供了 Unity 与 Godot 的引擎支持,提供架构分层、事件系统、状态机、对象池、资源管理、UI 工具和编辑器扩展,帮助开发者构建更清晰的游戏项目。

Topics

Resources

Stars

280 stars

Watchers

6 watching

Forks

Repository files navigation

YokiFrame

面向 Unity 与 Godot .NET 的跨引擎 C# 游戏框架

Unity Godot Version License


📖 简介

YokiFrame 是一套装进 Unity 或 Godot .NET 后就能直接调用的跨引擎 C# 游戏框架。它没有必须安装的第三方库,也不需要先搭建运行时上下文:安装并完成编译后,直接使用 EventKit、LogKit、ActionKit 等 Kit API。

它把游戏开发中最常见的基础工作拆成一组可独立组合的 Kit:组织业务服务、传递事件、管理状态、编排流程、加载资源、播放音频、保存数据、处理本地化和搭建 Unity UI。业务规则写在纯 C# Core 中,引擎 API、生命周期与默认后端由各自的宿主 Adapter 提供,因此换引擎不换业务代码。

✨ 核心特性

  • 📦 开箱即用 - 安装到引擎后直接调用,不需要手写启动器或注册模块
  • 🪶 无必须依赖 - 包本身不依赖第三方库;Unity 会自动发现已安装的可选库,并用宏切换对应 API
  • 🧹 非必要无初始化仪式 - 没有全局初始化入口;默认后端在第一次真实业务调用时创建
  • ✨ API 简单直接 - EventKit.Type.Send、ActionKit.Sequence()、LogKit.Info,名称即用途
  • 🏷️ 命名一致 - 能力统一以 Kit 结尾,入口、状态和动作都使用同一套短名称
  • 🚀 跨引擎 - 同一套 C# 业务代码,Unity 与 Godot .NET 通用,宿主差异由 Adapter 隔离
  • 🧩 小巧灵活 - 每个 Kit 可单独使用或自由组合,不需要一次启用整套框架
  • 🛠️ 统一工具链 - Avalonia Workbench 可视化观测、yoki CLI 脚本化操作、Installer 一键安装
  • 🔍 可观测性 - FileBridge 命令协议与共享内存遥测,为编辑器与 AI 工具提供可靠的诊断通道

📚 目录


🚀 快速开始

环境要求

环境 要求
Unity 2022.3 或更高
Godot 4.x .NET(当前开发与验证基线为 4.7,不支持非 .NET Godot)
工具链 Windows / macOS / Linux,构建 Workbench 与 yoki 时需 .NET 10 SDK
业务代码 C# 9.0 兼容语法

安装:Unity

  1. 打开 Window > Package Manager,点击 +,选择 Add package from git URL。

  2. 输入:

    https://github.com/HinataYoki/YokiFrame.git
    
  3. 等待导入和编译完成。

安装:Godot .NET

从完整 YokiFrame 源码包根目录运行对应脚本,传入 Godot 项目路径:

& "<packageRoot>\YokiFrameWorkbench~\scripts\runtime-bootstrap\install-godot.cmd" --project "<godotProjectRoot>"

Linux / macOS 使用同目录下的 install-godot.sh 或 install-godot.command。脚本会构建 Runtime 并打开 Installer 图形界面,在 Installer 中选择 Godot local、确认 plan 并执行 apply 即可。安装完成后请关闭并重新打开 Godot 项目,让编辑器重新扫描已生成的托管程序集。

💡 提示:构建失败时查看 Installer 返回的 dotnet 编译输出;详细说明见 故障排查。

交给 AI 安装

不想手动操作时,直接把本仓库地址(或本地源码包目录)和“安装 YokiFrame”一起交给 AI 即可。AI 会自动完成编译、Runtime 构建、安装计划与结果校验,详细流程见 AI 安装指引。

直接调用

安装完成后不需要任何启动代码。日志、事件和动作流程可以直接调用:

using YokiFrame;

LogKit.Info("Ready");
EventKit.Type.Send(new SessionStarted());

IActionController flow = ActionKit.Sequence()
    .Delay(0.5f)
    .Callback(() => LogKit.Info("Loaded"))
    .Start();

SessionStarted 是普通的 readonly struct,GameState 是普通枚举;框架不会要求它们继承特殊基类。订阅事件时保存返回的 LinkUnRegister<T>,模块停用时调用 UnRegister()。仍在运行的动作由创建它的业务 owner 调用 Cancel()。

需要组合多个业务服务时,再使用 Architecture。它同样没有全局启动器,第一次访问 GameArchitecture.Interface 时才创建:

public sealed class GameArchitecture : Architecture<GameArchitecture>
{
    protected override void OnInit() => Register<SessionService>(new SessionService());
}

GameArchitecture.Interface.GetService<SessionService>().StartSession();

更多生命周期约定见 生命周期与所有权。


✨ 为什么容易上手

没有启动仪式

直接调用 Kit API 即可。宿主 Adapter 随包安装进入引擎,会话换代由 Unity 或 Godot 生命周期自动完成。日志、事件、状态机、对象池和动作编排都不需要预先安装第三方库。

Unity Editor 会自动扫描 UniTask、YooAsset、DOTween、Luban、Nino、ZString 和 Input System。库存在时自动添加对应宏,移除后自动清除;异步入口等 API 随之在 UniTask 与普通 Task 之间切换,业务代码不需要手写条件编译或注册接入层。Godot 项目保持纯 C# API,不使用这套 Unity 宏。

默认资源与音频后端也在第一次真实加载或播放时创建。只有项目主动替换实现,或使用没有默认数据来源的能力时,才需要提前配置:

场景 需要做什么
使用引擎默认资源或音频 无需配置,直接调用
使用自己的资源、音频或 YooAsset 第一次调用前 SetProvider
查询本地化文本 先 LocalizationKit.SetProvider
定制 Unity UI 根节点 第一次打开面板前 UIKit.SetRootPrefab
读取 Luban 数据表 先用 TableKit 生成项目代码

诊断和 Workbench 读取不会因为“看一眼”而创建这些业务后端。

命名怎么读

API 名称按职责拆开,不使用 Manager、Helper 或编号后缀。日常玩法直接从对应 Kit 进入:

AudioVoiceHandle hit = AudioKit.PlaySfx("Audio/Hit");
AudioKit.PlayMusic("Audio/Bgm", loop: true);

SaveData progress = SaveKit.CreateSaveData();
progress.RegisterModule(new PlayerProgress());
SaveKit.Save(SaveTarget.Slot(0), progress);

InventoryPanel bag = UIKit.OpenPanel<InventoryPanel>();
SceneKit.LoadSceneAsync("Town", onComplete: _ => LogKit.Info("Entered town"));
LocalizationKit.SetLanguage(LanguageId.English);
string title = LocalizationKit.Get(1001);

PlaySfx 和 PlayMusic 使用引擎默认音频后端。存档第一次写入时创建默认存储。OpenPanel 是 Unity UI 入口,Godot 项目继续使用 Godot 自己的界面。场景名和本地化文本来源需要项目自己提供;本地化在查询前还要先 SetProvider。

名称 含义 日常例子
Kit 一组独立能力及其静态入口 AudioKit.PlaySfx、SaveKit.Save、UIKit.OpenPanel
Play / Load / Open 开始一次播放、加载或打开 PlayMusic、ResKit.Load<T>、OpenPanel<T>
Handle 这一次播放或加载的所有权 AudioVoiceHandle、ResHandle<T>、SceneHandler
Stop / Release / Close 结束对应的所有权 AudioKit.Stop(hit)、handle.Release()、UIKit.ClosePanel<T>()
Save / Load / Slot 存档写入、读取和槽位 SaveTarget.Slot(0)、SaveKit.TryLoad
Get / SetLanguage 取文本和切换语言 LocalizationKit.Get、SetLanguage
Register / Send 建立订阅和发布事件 EventKit.Type.Register<T>、EventKit.Type.Send
Sequence / Delay / Callback 把等待和回调串成一段流程 ActionKit.Sequence().Delay(0.5f).Callback(...)
Allocate / Recycle 从对象池借出和归还 pool.Allocate()、pool.Recycle(bullet)
Provider 替换资源或音频来源,或安装本地化文本来源 ResKit.SetProvider(...)、LocalizationKit.SetProvider(...)

看到 Kit 就是能力入口,看到 Play、Load、Open、Save 就是在做这件事,看到 Handle 就要由创建它的模块负责结束。资源、音频和存档的普通调用碰不到 Provider;本地化没有默认文本来源,查询前要先安装。


🧩 核心模块

架构

模块 作用 文档
Architecture 组合服务、模型和系统,提供统一的业务边界 Architecture

Core Kit

模块 作用 文档
EventKit 类型事件、枚举事件和对象内事件 EventKit
FsmKit 有限状态机、状态转换和历史 FsmKit
LogKit 统一日志入口和宿主后端 LogKit
PoolKit 对象复用和池生命周期 PoolKit
ResKit 资源加载、Provider、handle 和卸载 ResKit
SingletonKit 纯 C# 单例 SingletonKit
ToolClass 通用集合、绑定值和字符串工具 ToolClass
CodeGenKit 编辑器代码生成基础能力 CodeGenKit
InspectorKit Unity Inspector 基础控件 InspectorKit

Tool Kit

模块 作用 文档
ActionKit 顺序、并行、条件、延迟和异步动作 ActionKit
AudioKit 音频资源、总线和播放状态 AudioKit
LocalizationKit JSON 或 Luban 表格本地化 LocalizationKit
SaveKit 存档读写、版本和迁移 SaveKit
SceneKit 场景预加载、切换和卸载 SceneKit
SpatialKit HashGrid、Quadtree 和 Octree 空间查询 SpatialKit
TableKit Luban 配置生成和运行时读取 TableKit
UIKit Unity 面板、绑定、动画和代码生成 UIKit
RoslynKit 操作当前编辑器:进播放、查场景、调用已有服务;不退出播放时试行为 RoslynKit

🛠️ 工具链

工具 用途
Workbench Avalonia 桌面工具,实时查看项目状态、Kit 运行态与诊断信息
yoki CLI 脚本化读取、诊断、宿主操作和受信任内存 C#。改变宿主状态前先看 RoslynKit 开关
Installer 图形化安装、更新与回滚,支持 Unity 本地 / Git URL 与 Godot 本地安装

工具链面向开发者和 AI 工具,运行时诊断不会进入 Player 构建。安装相关的自动化流程见 AI 安装指引。


📁 项目结构

YokiFrame/                     # 包根(同时是 Unity Git URL 包根)
├── Core/                      # 跨引擎核心
│   ├── Runtime/               # 纯 C# 业务能力(YokiFrame 程序集)
│   ├── Editor/                # Unity Editor 与 Godot Tools 共用的纯 C# 工具
│   ├── Adapters/              # 宿主适配层(Unity / Godot)
│   ├── Integrations/          # 可选第三方依赖接入
│   └── Tests/
├── Tools/                     # 各 Kit(ActionKit / UIKit / SaveKit / ...)
├── YokiFrameWorkbench~/       # Workbench、CLI、Installer 源码(不参与 Unity 编译)
└── Documentation~/            # 文档(API、指南、第三方依赖建议)

💻 系统要求

项目 要求
Unity 2022.3 或更高
Godot 4.x .NET(当前开发与验证基线为 4.7)
.NET 工具链(Workbench / CLI / Installer)基于 .NET 10
C# Runtime 业务代码保持 C# 9.0 兼容
平台 工具链支持 Windows、macOS、Linux

📚 文档导航

文档 描述
框架概览 新手入口:适用场景、Kit 状态、默认后端与关键边界
AI 安装指引 安装与 AI 自动化安装的完整流程
生命周期与所有权 事件、资源、动作与异步工作的 owner 约定
故障排查 常见问题与诊断方法
第三方依赖建议 YooAsset、UniTask、DOTween、Luban 等接入建议
Changelog 版本更新记录
License MIT 开源许可

🤝 贡献与支持

欢迎提交 Issue 和 Pull Request。

如果 YokiFrame 对你有帮助,欢迎 ⭐ Star 支持项目发展。


源框架

YokiFrame 是基于 QFramework 演化的衍生框架。

About

YokiFrame 是一个 C# 游戏框架 默认提供了 Unity 与 Godot 的引擎支持,提供架构分层、事件系统、状态机、对象池、资源管理、UI 工具和编辑器扩展,帮助开发者构建更清晰的游戏项目。

Topics

Resources

Stars

280 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages