项目 github地址
打开项目选GameLauncher场景,直接启动游戏。我用的是 Unity 2021.3.6f1 版本。但应该是2017之后的都支持,没有实测过。
参考
老规矩,先看上面这篇文章,掌握大致的原理。
简单总结一下
- Entity/实体 就是游戏里根据预制体创建出来的GameObject,飞机,子弹,buff 等等,框架封装了创建和回收的逻辑,以及对实体对象池的管理。
- GameFramework 主要有 Entity 和 EntityLogic 两个Mono类,会在创建好GameObject后挂在GameObject上面。
- Entity是sealed的,不可扩展的,固定几个属性框架内部使用,业务层可以获取。
- EntityLogic 是我们要根据需要进行扩展的类,完成对实体对象的业务控制。EntityLogic有完整的生命周期,我们要根据需要实现这些接口。
namespace UnityGameFramework.Runtime
{
public abstract class EntityLogic : MonoBehaviour
{
private Entity m_Entity = null;
private Transform m_CachedTransform = null;
...
protected virtual void OnInit(object userData);
protected virtual void OnRecycle(object userData);
protected virtual void OnShow(object userData);
protected virtual void OnHide(object userData);
protected virtual void OnAttached(object userData);
protected virtual void OnDetached(object userData);
...
}
}
Entity类主要负责实体的生命周期管理和基础属性,提供了一套统一的操作接口,使得业务层可以对实体进行统一的操作。
而EntityLogic类则是实体逻辑的基类,它包含了实体的具体逻辑,如实体的初始化逻辑、显示逻辑、隐藏逻辑等。开发者可以通过继承EntityLogic类来实现具体的实体逻辑,这样就可以定制化实体的特殊属性和行为。
- 定义好T(继承自EntityLogic)之后,调用Entity.ShowEntity就可以在游戏中创建需要的对象了。什么按模式按目录加载预制件,初始化,缓存重用,回收,框架都帮你管理好了。你只要在需要的地方show出来,然后不用了就hide掉就行了。
Entity.ShowEntity<T>(int entityId, string entityAssetName, string entityGroupName, int priority, object userData) where T : EntityLogic
{
...
}
二次封装做了什么
- 按需暴露业务层使用到的接口,封装 EntityMgr,让接口方法和入参更加明确。
- 把业务层的读表逻辑加到EntityMgr的接口,封装多一层到EntityBsMgr,业务层只允许调用这个类。
- 每一个实体对应实现自己的XXXMgr方法,职责更加明确。
使用
封装之后使用非常简单,分3步。
- 节点配置
- 每一个实体都对应在Entity节点下配置一个EntityGroup。
- 主要是缓存池的设置。
2.加入配置表
- 打开ComTools,修改Entity Excel 表。
- 怎么根据Excel生成json配置表文件?参考之前的文章,GameFramework 二次封装之 DataTable配置表 导表工具
- 代码参照 MyAircraft 扩展自己的Entity。业务层调用对应的 XXXMgr串联业务。
嗯 到这里,新的实体就已经添加到项目了。是不是超简单?