GameFramework 二次封装之 Entity实体

项目 github地址

打开项目选GameLauncher场景,直接启动游戏。我用的是 Unity 2021.3.6f1 版本。但应该是2017之后的都支持,没有实测过。

参考

GameFramework框架详解之 Entity实体

老规矩,先看上面这篇文章,掌握大致的原理。

简单总结一下

  1. Entity/实体 就是游戏里根据预制体创建出来的GameObject,飞机,子弹,buff 等等,框架封装了创建和回收的逻辑,以及对实体对象池的管理。
  2. GameFramework 主要有 Entity 和 EntityLogic 两个Mono类,会在创建好GameObject后挂在GameObject上面。
  3. Entity是sealed的,不可扩展的,固定几个属性框架内部使用,业务层可以获取。
  1. EntityLogic 是我们要根据需要进行扩展的类,完成对实体对象的业务控制。EntityLogic有完整的生命周期,我们要根据需要实现这些接口。
csharp 复制代码
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);
		...
	}
}
  1. 定义好T(继承自EntityLogic)之后,调用Entity.ShowEntity就可以在游戏中创建需要的对象了。什么按模式按目录加载预制件,初始化,缓存重用,回收,框架都帮你管理好了。你只要在需要的地方show出来,然后不用了就hide掉就行了。
csharp 复制代码
Entity.ShowEntity<T>(int entityId, string entityAssetName, string entityGroupName, int priority, object userData) where T : EntityLogic 
{
    ...
}

二次封装做了什么

  1. 按需暴露业务层使用到的接口,封装 EntityMgr,让接口方法和入参更加明确。
  2. 把业务层的读表逻辑加到EntityMgr的接口,封装多一层到EntityBsMgr,业务层只允许调用这个类。
  3. 每一个实体对应实现自己的XXXMgr方法,职责更加明确。

使用

封装之后使用非常简单,分3步。

  1. 节点配置
  • 每一个实体都对应在Entity节点下配置一个EntityGroup。
  • 主要是缓存池的设置。

2.加入配置表

怎么加入配置表参考之前的文章,GameFramework 二次封装之 DataTable配置表 导表工具

  1. 代码参照 MyAircraft 扩展自己的Entity。业务层调用对应的 XXXMgr串联业务。

嗯 到这里,新的实体就已经添加到项目了。是不是超简单?

相关推荐
留待舞人归4 天前
【Unity3D优化】AssetBundle的压缩格式优化
游戏·unity·游戏引擎·unity3d
Thomas游戏开发7 天前
Unity3D游戏排行榜制作与优化技术详解
前端框架·unity3d·游戏开发
Thomas_YXQ7 天前
Unity3D Shader 简析:变体与缓存详解
开发语言·前端·缓存·unity3d·shader
Thomas游戏开发9 天前
Unity3D 架构师如何处理大世界地图技术详解
前端框架·unity3d·游戏开发
Thomas游戏开发9 天前
Unity3D MMORPG 任务系统的架构与设计详解
前端框架·unity3d·游戏开发
jojo的奇妙前端20 天前
unity - 排行榜 - 头像(二)
unity3d
scott.cgi22 天前
「Unity3D」在Unity中使用C#控制显示Android的状态栏
unity·unity3d·android状态栏·c#控制android状态栏·unity显示状态栏
Thomas_YXQ1 个月前
Unity3D项目开发中的资源加密详解
游戏·3d·unity·unity3d·游戏开发
Thomas_YXQ1 个月前
Unity3D 动态骨骼性能优化详解
开发语言·网络·游戏·unity·性能优化·unity3d
程序员海军1 个月前
腾讯混元3D更新:人人都可以轻松制作一个3D模型
前端·openai·unity3d