【发布时间】:2018-07-10 04:28:54
【问题描述】:
所以基本上我有 2 个用作对象池的静态列表和 3 个与这些列表交互的函数。我一直在存储附加到游戏对象的脚本,因为这是我想做的所有工作。
将对象添加到列表中
public static void AddLightning(Lightning newLightning)
{
lightningList.Add(newLightning);
}
从活动列表中删除对象,停用它并将其移动到死列表
public static void RemoveLightning(Lightning oldLightning)
{
lightningList.Remove(oldLightning);
deadLightningList.Add(oldLightning);
Debug.Log("Dead number in list: " + oldLightning.number);
oldLightning.gameObject.SetActive(false);
//Debug.Log("adding dead Lightning" + deadLightningList.Count);
}
One 获取一个死实例,如果没有死实例,则创建一个新实例。
public static Lightning GetLightning()
{
Lightning retLightning;
//Debug.Log(deadLightningList.Count);
if (deadLightningList.Count > 0)
{
//Debug.Log("Using dead Lighting");
retLightning = deadLightningList[0];
deadLightningList.RemoveAt(0);
lightningList.Add(retLightning);
return retLightning;
}
//Debug.Log("Adding New Lighting");
GameObject newObject;
newObject = Instantiate<GameObject>(lightningFab);
retLightning = newObject.GetComponent<Lightning>();
lightningList.Add(retLightning);
retLightning.gameObject.SetActive(true);
return retLightning;
}
这是唯一请求闪电实例的代码
float dmgMult = 1;
float chainDamage = damage;
Lightning lightning;
lightning = GetLightning();
lightning.SetTower(tower);
lightning.SetNumber(lightningNum);
lightningNum++;
lightning.setTargets(chainList);
foreach (mobBase mob in chainList)
{
chainDamage *= dmgMult;
mob.DamageMob(chainDamage);
//Debug.Log("Damage: " + chainDamage);
dmgMult *= 0.8f;
}
闪电设置为在固定时间后杀死自己并重新将自己添加到死亡列表中。
void OnEnable () {
ProjectileBase.AddLightning(this); //Added to see if it would help, it doesnt
lightningLine = GetComponent<LineRenderer>();
timeKill = .2f;
}
// Update is called once per frame
void FixedUpdate () {
setLine(targets);
timeAlive += Time.deltaTime;
if (timeAlive >= timeKill)
{
Debug.Log("Dead number Adding: " + number);
ProjectileBase.RemoveLightning(this);
}
}
闪电在死亡时会正确地自行关闭。但是列表中似乎从来没有超过一个对象实例。我添加了 LightningNum 以查看它在制作新模式时是否有任何模式,并且它似乎至少重复使用了一次闪电,然后一起忘记了它。
ProjectileBase 是存放静态列表的地方
【问题讨论】: