本文实现了怪物子弹的重用。可通过子弹名字来获取已生成且被隐藏的对象。
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;
}