摘要
- 本文将会讲解在弹幕框架基本结构下的具体实现,要想阅读本文,建议先阅读前置文章
开发思路
- 在编写具体代码前,要先思考,在UnityC#开发中,我们希望整个框架的具体逻辑是如何的。
- 虽然在前一文章中已经阐述了诸如接口方法、对象池、以及三层结构。但它们并不具备完整的解决方案,我们仍要思考完整的解决方案应该是什么样子的。一个很好的方法就是提要求。
- 对于一切运动实体,我们希望它们自己运动,自己判断是否应该结束运动并回到池子中。这也就意味着我们希望与运动判断相关的逻辑都在实体内部实现,并且对象池的入列方法交给实体自己来执行,即“别人从池子中拿实体,实体自己将自身还到池子中”。
- 对于对象池,我们希望在UnityEditor窗口中设置好后,就能在Runtime下生效,我们只需要通过API去使用就可以了。这也就意味着对象池在初始化的时候能够自动的加载对象,并且将自己注册到管理类的字典中。
- 在获取对象的时候,我们希望各种复杂的统一细节交给管理类,我们只要申请,然后得到对象,除了做一些该对象特有的设置外,只需要通过调用一个方法,就能让对象开始运动。
具体实现
- 在思考了具体需求后,我们就可以依次来实现三层结构各部分了。
- 需要说明的是,在实际开发中必然不可能如此顺利的逐一实现,而是会在测试中反复横跳,进行取舍,最终得出设计的相对优解。
实体类
public abstract class EntityBase : MonoBehaviour, ShotBaseInter
{
private Action<ShotBaseInter> enqueue {
set; get; }
public EntityBase()
{
enqueue = null;
}
protected virtual void OnEnable()
{
OnShotBehaviour();
}
public abstract void OnShotBehaviour();
public void START()
{
gameObject.SetActive(true);
}
public void STOP()
{
StopAllCoroutines();
gameObject.SetActive(false);
if (enqueue != null)
enqueue.Invoke(t