独立游戏开发(六)-- 对象池及模块加载

其实到现在,我也基本确定了游戏的一个方向,就是做病毒传播,player躲避病毒的游戏。

接下来就处理一下病毒源这一块,我是这么想的,整个世界有4个病毒源,他们源源不断的产生各种各样的病毒。。。

(缺美术,缺美术,缺美术)真缺,自己找的资源实在不堪入目。

世界观大体上长这样。。。

现在,我先设置一下病毒源表。

id:代表4个位置

virus:代表里面有哪几种病毒,对应了一张病毒表

病毒表长这样,脑细胞有限,先设置2种病毒:

track:是否追踪player;

后面还会加一个是否繁殖。。。

因为我们后面会加载很多病毒,所以量级上可能会很大,所以引入了一个对象池的概念,下面是简单的实现:

#region 对象池

private Dictionary<int, List<GameObject>> _VirusPools = new Dictionary<int, List<GameObject>>();
private Dictionary<int, GameObject> _Prefabs = new Dictionary<int, GameObject>();

private GameObject GetPoolObj(VirusData data)
{
    var id = data.Id;
    GameObject result = null;
    if (_VirusPools.ContainsKey(id))
    {
        if (_VirusPools[id].Count > 0)
        {
            result = _VirusPools[id][0];
            result.SetActive(true);
            _VirusPools[id].Remove(result);
            return result;
        }
    }

    GameObject prefab = null;
    if (_Prefabs.ContainsKey(id))
    {
        prefab = _Prefabs[id];
    }
    else
    {
        //prefab = Resources.Load<GameObject>("Prefabs/"+objName);
        prefab = GameEntry.LoaderService.Instantiate(data.Asset, _VirusSlotTrans, false);
        _Prefabs.Add(id, prefab);
    }

    //result = UnityEngine.Object.Instantiate(prefab);
    prefab.name = $"{data.Name}_{id}";
    return prefab;
}

public void RecycleObj(int virusId, GameObject obj)
{
    obj.SetActive(false);
    if (_VirusPools.ContainsKey(virusId))
    {
        _VirusPools[virusId].Add(obj);
    }
    else
    {
        _VirusPools.Add(virusId, new List<GameObject>() {obj});
    }
}

#endregion

先简单看看加载出来的效果

总结:今天主要梳理了病毒表及加载模块,并实现了初步的效果。后面的话实现将病毒加载到源头以及定时加载;

另外,美术资源有点丑,实在是没得办法。

传送门:独立游戏开发--索引

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值