Unity对象的重用

本文实现了怪物子弹的重用。可通过子弹名字来获取已生成且被隐藏的对象。

private List<GameObject> bulletList = new List<GameObject>();
    public void CreateBullet(int monsterID, Transform Par, Transform tar, string prefabName)
    {
        MonsterBulletBase monserBullet = CreateMonsterBullet(prefabName);

        if (monserBullet)
        {
            monserBullet.Init(monsterID, Par, tar);
        }
    }

    private MonsterBulletBase CreateMonsterBullet(string prefabName)
    {
        if (string.IsNullOrEmpty(prefabName))
            return null;

        GameObject go = null;
        MonsterBulletBase monsterBullet = null;

        foreach (GameObject gameObject in bulletList)
        {
            if (gameObject && !gameObject.activeSelf && gameObject.name.Equals(prefabName))    // 如果对象存在、不可见,且名字一致即重用
            {
                go = gameObject;
                go.SetActive(true);
                break;  // 找到就跳出,避免启用多个
            }
        }

        if (go == null)
        {
            go = GameObject.Instantiate(Resources.Load(bulletPrefabPath + prefabName)) as GameObject;
            go.name = prefabName;   // 生成的时候设置对象名字为prefabName
        }
        bulletList.Add(go);

        monsterBullet = go.GetComponent<MonsterBulletBase>();
        if (monsterBullet == null)
        {
            monsterBullet = go.AddComponent<MonsterBulletBase>();
        }

        return monsterBullet;
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值