# GameDesigner
**Repository Path**: xxmfl/GameDesigner
## Basic Information
- **Project Name**: GameDesigner
- **Description**: Verxel(原GDNet)双端Rpc网络框架用于Unity3D,窗体程序和控制台项目开发, 高效稳定, 高性能高并发, 各种协议一键切换: gcp, udx, kcp, tcp, web, http 包含各种模块, AOI模块, Recast寻路模块, GameCore客户端框架等等
- **Primary Language**: C#
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 165
- **Created**: 2026-06-20
- **Last Updated**: 2026-06-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# GameDesigner - 游戏开发框架




**专为游戏设计的前后端网络框架与可视化状态机**
---
## 项目简介
GameDesigner 是一个面向 Unity 引擎的游戏开发框架,核心提供**前后端网络通信**和**可视化动作状态机**两大能力。框架采用模块化设计,各模块可独立使用也可组合部署,同时提供 .NET Framework 4.8(Unity 端)和 .NET 8.0(独立服务器端)双构建目标。
**作者**: 冷月 | **协议**: MIT
---
## 架构概览
```
GameDesigner/
├── Core/ # 基础层:序列化、RPC、SyncVar、线程安全容器、软浮点
├── Network/ # 网络层:Client/Server、多传输协议、适配器模式
├── StateMachine~/ # 可视化状态机:图表编辑器、行为组件、动画集成
├── ActorSystem~/ # 角色系统:Actor/Skill/Buff/Property
├── Entities~/ # ECS 架构:Entity/Component/World
├── AOI~/ # 兴趣区域:九宫格空间分区
├── MVC~/ # MVC 框架:ViewBind 可视化绑定
├── NetworkComponent~/ # Unity 网络组件:NetworkObject/Transform/Animator
├── GameCore~/ # 游戏基础设施:UI/资源/场景/音频/事件/对象池
├── NonLockStep~/ # 非锁步同步:确定性物理、回滚、BEPUphysics
├── Distributed~/ # 分布式:一致性哈希、负载均衡、唯一ID
├── Recast~/ # 寻路:Recast/Detour 封装
├── Table/ # 配置表:Excel→代码、JSON/二进制序列化
├── Serialize/ # JSON 序列化(内嵌 Newtonsoft.Json)
├── Helper/ # 工具集:加密、压缩、MySQL、代码生成
├── Extensions/ # 扩展方法:Client/Server/Unity/UniTask
├── Editor/ # 编辑器工具:模块导入、序列化构建、属性绘制
├── UniTask/ # 零分配 async/await(内嵌)
├── K4os.Hash.xxHash/ # xxHash32/64 快速哈希(内嵌)
├── SoftFloat/ # 软浮点 sfloat/bigfloat(确定性跨平台)
└── Example~/ # 示例项目
```
---
## 模块详解
### 1. Core - 核心基础层
框架的底层基础设施,所有其他模块都依赖于此。
**主要功能:**
- **二进制序列化** (`BinarySerialize`): 高性能二进制序列化器,支持 IL2CPP 友好模式,可用于网络传输和本地存储
- **RPC 系统** (`Net.Share`): 基于 `[Rpc]` 特性的远程过程调用,支持多种路由模式(EntityRpc、Scene、Notice、Local 等)
- **SyncVariable 同步变量**: `SyncVariable` 泛型同步包装器,通过脏标记自动检测变更并同步,支持 `OnValueChanged` 回调
- **线程安全容器** (`Net.System`): 提供 `FastList`、`HashSetEx`、`QueueSafe`、`Segment` 等高性能线程安全数据结构
- **缓冲池** (`BufferPool`/`Segment`): 字节缓冲池与分片管理,减少 GC 压力
- **定时器系统** (`TimerManager`/`TimerSchedule`): 高精度定时器调度
- **软浮点** (`SoftFloat`): `sfloat` (IEEE 754 binary32) 和 `bigfloat` 的纯软件实现,保证跨平台确定性
**使用示例:**
```csharp
using Net.Share;
public class PlayerData
{
// SyncVariable 泛型同步变量,值变更自动标记脏并触发回调
public SyncVariable Health = new SyncVariable(100, OnHealthChanged);
public SyncVariable Speed = new SyncVariable(5f);
public SyncVariable Name = new SyncVariable("Player");
private static void OnHealthChanged(int newValue)
{
Debug.Log($"血量变化: {newValue}");
}
// Rpc 特性标记远程方法,支持字节码/哈希/字符串三种路由标识
[Rpc(100)]
public void Attack(int targetId, float damage)
{
// 该函数可被远程调用
}
}
```
---
### 2. Network - 网络通信层
完整的前后端网络通信框架,支持多种传输协议和灵活的可插拔架构。
**主要功能:**
- **服务端** (`Net.Server.ServerBase`): 抽象服务器基类,通过 `ISerializeAdapter`、`IPackageAdapter`、`IRpcAdapter`、`IRpcModelFactory` 四组适配器接口实现完全可定制的网络栈
- **客户端** (`Net.Client.Client`): 抽象客户端基类,提供 `OnConnected`、`OnConnectFailed`、`OnReconnect`、`OnDisconnect` 等完整的事件体系,内置断线重连和排队机制
- **客户端对等体** (`Net.Server.ClientPeer`): 服务端持有的玩家连接对象,继承 `ClientUnitBase`,管理单连接的收发、心跳和线程分配
- **场景管理** (`Net.Server.SceneBase`): 服务端场景/房间,容纳玩家集合,支持帧同步操作分发和线程组迁移
- **多传输协议**: 内置 Gcp / Kcp / Udx / WebSocket 四种传输层实现,位于 `Network/Gcp~/`、`Network/Kcp~/`、`Network/Udx~/`、`Network/Web~/`
- **网络命令** (`Net.Share.NetCmd`): 定义全部内置协议命令码(心跳、RPC、同步、排队等),用户自定义命令从 100 开始
- **流量统计** (`NetworkTrafficStatistics`): 实时收发字节数和数据包统计
**使用示例:**
```csharp
using Net.Server;
using Net.Client;
using Net.Share;
// --- 定义 RPC 方法 ---
public class GameRpc
{
[Rpc(100)]
public void PlayerMove(long playerId, float x, float y, float z) { }
[Rpc(101)]
public void PlayerAttack(long playerId, int skillId) { }
}
// --- 服务端 ---
public class GameServer : ServerBase
{
protected override void OnStart()
{
// 可替换适配器
SerializeAdapter = new BinarySerializeAdapter();
PackageAdapter = new PackageAdapter();
RpcAdapter = new NormalRpcAdapter { Mode = AdapterMode.Server };
}
protected override void OnClientConnected(ClientPeer client)
{
Debug.Log($"玩家连接: {client.UserId}");
}
}
// --- 客户端 ---
public class GameClient : Client
{
public GameClient()
{
OnConnected += () => Debug.Log("连接成功");
OnConnectFailed += () => Debug.Log("连接失败");
OnReconnect += () => Debug.Log("重连成功");
OnDisconnect += () => Debug.Log("断开连接");
}
}
```
---
### 3. StateMachine - 可视化状态机
Unity 编辑器内完整的可视化状态机系统,支持动画状态机、子状态机、行为组件等。
**主要功能:**
- **可视化编辑器** (`StateMachineWindow`/`GraphEditor`): 在 Unity Editor 中拖拽创建状态节点和连线
- **状态** (`GameDesigner.State`): 密封类,包含 `transitions` 过渡数组、`behaviours` 行为数组、`actionSystem` 动作系统开关
- **过渡** (`GameDesigner.Transition`): 状态之间的连线,支持 `exitTime` 定时过渡和 `ScriptControl` 脚本控制模式
- **行为组件** (`BehaviourBase`): 类似 Unity Component 的附加机制,`State.AddComponent()` 动态添加行为
- **动画模式** (`AnimationMode`): 支持 Animation / Animator / MeshAnimator / Timeline / Time / None 六种模式
- **播放模式** (`AnimPlayMode`): Random(随机)、Sequence(顺序)、Code(代码控制)
- **状态层** (`IStateLayer`): 多层状态机支持
- **状态类型** (`StateType`): None / SubStateMachine / Parent,支持嵌套子状态机
- **软浮点支持**: 定义 `ENABLE_SFLOAT` 后过渡时间使用 `sfloat` 保证确定性
**使用示例:**
```csharp
using GameDesigner;
public class PlayerStateMachine : StateMachineView
{
private void Start()
{
// 获取状态机控制器
var sm = Controller.GetStateMachine(0);
// 获取默认状态的过渡,添加脚本控制行为
var defaultState = sm.DefaultState;
defaultState.AddComponent();
// 通过代码切换状态
sm.PerformTransition(sm.CurrState.transitions[0]);
}
}
// 自定义行为组件
public class OnStartBehaviour : BehaviourBase
{
public override void OnEnter()
{
Debug.Log($"进入状态: {State.Name}");
}
public override void OnUpdate()
{
// 每帧更新逻辑
}
public override void OnExit()
{
Debug.Log($"离开状态: {State.Name}");
}
}
```
---
### 4. ActorSystem - 角色系统
面向 RPG 类型游戏的角色管理框架,定义 Actor / Skill / Buff / Property 四层抽象。
**主要功能:**
- **角色基类** (`ActorSystem.ActorBase`): 继承 `Net.Entities.Component`,可融入 ECS 架构,持有 `Commands` 字典路由操作指令,实现 `IGridObject` 接口与 AOI 系统联动
- **泛型角色** (`ActorBase`): 携带属性/技能/Buff 的完整角色,自动遍历更新技能冷却和 Buff 生命周期
- **技能** (`ActorSystem.SkillBase`): 管理冷却时间 (`CooldownTime`/`CurrentCooldownTime`),`UseSkill()` 检查冷却并触发 `OnUseSkill()` 虚方法
- **Buff** (`ActorSystem.BuffBase`): 生命周期回调 `OnStart()` → `OnUpdate()` → `OnEnd()`,`OnTrigger()` 用于 DOT 类效果的克隆触发
- **属性** (`ActorSystem.PropertyBase`): 最小化基类,提供 `IsDeath` 判定,由用户扩展具体属性
**使用示例:**
```csharp
using ActorSystem;
// 自定义属性
public class HeroProperty : PropertyBase
{
public int Health = 100;
public int MaxHealth = 100;
public int Mana = 50;
public int Attack = 10;
public override bool IsDeath => Health <= 0;
}
// 自定义技能
public class FireballSkill : SkillBase
{
public override void OnUseSkill()
{
// Self 是泛型约束提供的当前角色引用
Self.Property.Mana -= 10;
Debug.Log("释放火球术");
}
}
// 自定义 Buff
public class PoisonBuff : BuffBase
{
private float tickTimer;
public override void OnStart()
{
Debug.Log($"{Target.Name} 中毒");
}
public override bool OnUpdate()
{
tickTimer += Time.deltaTime;
if (tickTimer >= 1f)
{
tickTimer = 0f;
Target.Property.Health -= 5;
}
return true; // 返回 true 持续生效
}
public override void OnEnd()
{
Debug.Log($"{Target.Name} 中毒效果结束");
}
}
// 自定义角色
public class Hero : ActorBase
{
public override void UseSkill(int index)
{
if (index < Skills.Count)
Skills[index].UseSkill();
}
}
```
---
### 5. Entities - ECS 实体组件系统
不依赖 Unity 的纯 C# ECS 架构,可用于服务端逻辑。
**主要功能:**
- **世界** (`Net.Entities.World`): 实体容器,通过 `Init()` 自动扫描 `[RuntimeInitializeOnLoadMethod]` 特性完成初始化,管理根实体和定时事件
- **实体** (`Net.Entities.Entity`): 密封类,API 设计模仿 `GameObject`(`gameObject` 属性指向自身、`active` 激活开关),支持父子层级 (`Parent`/`Childs`),组件通过 `FastList` 存储
- **组件** (`Net.Entities.Component`): 基类,持有 `Entity` 反向引用,提供 `GetComponent()`/`GetComponentInChildren()` 等 Unity 风格查询方法
**使用示例:**
```csharp
using Net.Entities;
public class MyWorld : World
{
public override void OnInit(params object[] args)
{
var entity = new Entity { active = true };
AddEntity(entity);
var comp = entity.AddComponent();
}
}
public class MyComponent : Component
{
public void DoSomething()
{
// 通过 Entity 访问同实体上的其他组件
var other = GetComponent();
}
}
```
---
### 6. AOI - 兴趣区域
九宫格空间分区系统,用于优化大型多人在线场景的网络同步。
**主要功能:**
- **网格世界** (`Net.AOI.GridWorld`): 将世界划分为矩形网格,`GridType.Horizontal`(3D 游戏)/ `GridType.Vertical`(2D 游戏)
- **网格** (`Grid`): 单个网格单元,持有其中的对象列表
- **Unity 组件** (`Net.Component.AOIObject`): MonoBehaviour,`Start()` 自动注册到 `AOIManager.I.world`,支持 `OnMainRoleEnter`/`OnMainRoleExit` UnityEvent
- **接口** (`IGridObject`): `Identity`、`Position`、`Grid`、`MainRole`,由 `ActorBase` 和 `AOIObject` 实现
- **回调**: `OnEnter(IGridObject)` / `OnExit(IGridObject)` / `OnEnterGrid(Grid)` / `OnLeaveGrid(Grid)`
**使用示例:**
```csharp
using Net.AOI;
using Net.Component;
using UnityEngine;
public class GameAOISetup : MonoBehaviour
{
public int gridWidth = 10;
public int gridHeight = 10;
public Vector2 worldSize = new Vector2(1000, 1000);
private void Awake()
{
// 初始化九宫格世界
var world = new GridWorld();
world.Init(Vector2.zero, new Vector2(gridWidth, gridHeight), worldSize);
AOIManager.I.world = world;
}
}
// 挂载 AOIObject 组件的 GameObject 会自动注册到网格系统
// 实现 IGridObject 的自定义对象
public class Monster : ActorBase
{
public override void OnEnter(IGridObject gridObject)
{
if (gridObject.MainRole)
{
// 玩家进入视野,开始同步该怪物
Debug.Log("玩家进入视野,激活怪物");
}
}
public override void OnExit(IGridObject gridObject)
{
if (gridObject.MainRole)
{
// 玩家离开视野,停止同步
Debug.Log("玩家离开视野,休眠怪物");
}
}
}
```
---
### 7. MVC - 模型视图控制器
Unity 编辑器可视化数据绑定框架。
**主要功能:**
- **ViewBind** (`MVC.ViewBind`): MonoBehaviour,包含 `List` 列表,每个 Field 将字符串名称关联到 Unity Object 引用,支持运行时 `To()` 类型转换获取
- **可视化编辑器** (`ViewBindEditor`): Inspector 面板中拖拽绑定 UI 控件到字段
- **AppContext**: 应用上下文,协调 Model/View/Controller
**使用示例:**
```csharp
using MVC;
using UnityEngine;
using UnityEngine.UI;
public class LoginView : ViewBind
{
private void Start()
{
// 通过名称获取绑定的 UI 控件
var usernameInput = fields.Find(f => f.name == "UsernameInput").To();
var passwordInput = fields.Find(f => f.name == "PasswordInput").To();
var loginBtn = fields.Find(f => f.name == "LoginBtn").To