前言
书接上回,上一篇文章介绍了对象池系统的构成和内部实现的逻辑,这一篇文章主要记录下对象池系统在JKFrame2.0的框架中该如何使用。
案例
我们做一个发射子弹的例子,来用到对象池系统。
创建子弹
创建子弹的预制体,可以用球来代替
添加子弹脚本
给子弹预制体添加子弹脚本,子弹2秒钟后,自动销毁
using JKFrame;
using UnityEngine;
public class BulletController : MonoBehaviour
{
public void Init()
{
transform.position=Vector3.zero;
Invoke(nameof(DestoryBullet),2f);
}
void Update()
{
transform.Translate(Vector3.forward*Time.deltaTime*5);
}
private void DestoryBullet()
{
transform.position=Vector3.zero;
//子弹放回对象池
PoolSystem.PushGameObject(gameObject);
}
}
添加控制发射脚本
写一个控制发射子弹的脚本,挂载到场景的空物体上
using JKFrame;
using UnityEngine;
public class PoolTest : MonoBehaviour
{
public GameObject bullet;
void Start()
{
//初始化对象池
PoolSystem.InitGameObjectPool(bullet,10,10);
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
//从对象池中获取子弹
PoolSystem.GetGameObject<BulletController>("bullet", transform)?.Init();
}
}
}
最终效果
总结
只是举了个简单的例子,抛砖引玉,大家可以多看下源码,对象池系统的用法还有很多,要灵活运用,以后的其他模块也有很多要用到对象池系统的。