使用对象池,需继承ObjectBase。首先创建一个OPGame的类,继承于ObjectBase,我们暂且把它叫做OP对象,如下图
![[图片]](/https://i-blog.csdnimg.cn/blog_migrate/2df04b49f767aa2d4e19cf4efdcc7f2b.png)
OP对象有两个地方可以存储成员对象或变量,一个是在OP对象内部如模型ID:m_ModelID。另一个则是对象池基类ObjectBase里的m_Target可以存储任何数据类型,需要装箱和拆箱。在创建OP对象时,我们传入自定义的类型ModelInfor,并在基类初始化时作为参数传入。
API调用
创建OP对象池:
m_OPPool = GameEntry.ObjectPool.CreateSingleSpawnObjectPool(Utility.Text.Format(“OP Pool ({0})”, name), 20, 10, 0);
创建OP对象: 创建完成后处于使用中
ModelInfor ModelInfor = new ModelInfor(i);
OPGame OPGame = OPGame.Create(“模型” + CreateNums, CreateNums, ModelInfor);
m_OPPool.Register(OPGame, true);
获取OP对象: 从对象池中获取未使用的OP对象
OPGame OPGame = m_OPPool.Spawn(“模型” + 0);
回收OP对象: 将正在使用的对象释放,回收至对象池
m_OPPool.Unspawn(OPGame);
设置OP对象是否被加锁: 加锁后,不能从对象池中销毁
m_OPPool.SetLocked(OPGame, true);
设置OP对象优先级: 没啥卵用
m_OPPool.SetPriority(OPGame, 10);
完整代码
ProcedureObjectPool:启动流程,创建ObjectPlayer对象
using UnityEngine;
using ProcedureOwner = GameFramework.Fsm.IFsm<GameFramework.Procedure.IProcedureManager>;
namespace StarForce
{
public class ProcedureObjectPool : ProcedureBase
{
public override bool UseNativeDialog
{
get
{
return true;
}
}
public override void OnEnter(ProcedureOwner procedureOwner)
{
base.OnEnter(procedureOwner);
GameObject TT = new GameObject("Player");
TT.AddComponent<ObjectPlayer>();
}
}
}
OPGame :OP对象及所存储的数据类
using GameFramework;
using GameFramework.ObjectPool;
using UnityEngine;
public class OPGame : ObjectBase
{

文章介绍了在Unity游戏中使用对象池管理资源,通过创建OPGame类继承ObjectBase,存储成员对象。OPGame可以在创建时传入ModelInfor数据,并通过对象池进行创建、注册、获取和回收。此外,还展示了如何设置对象的加锁状态和优先级,以及对象池的自动释放功能。

1495

被折叠的 条评论
为什么被折叠?



