【发布时间】:2015-07-15 08:01:04
【问题描述】:
提前感谢您的帮助。这是我遇到问题的代码的简短 sn-p。
GameObject[] allMotor_array;
public List<GameObject> BrokenMotor_list = new List<GameObject>();
void Start()
{
allMotor_array = GameObject.FindGameObjectsWithTag ("Motors");
}
void Update()
{
foreach (GameObject motor in allMotor_array)
{
if(motor.GetComponent<Pump_event>().damaged)
{
BrokenMotor_list.Add(motor);
}
}
}
我有一个在开始时创建的游戏对象数组,数组中的每个游戏对象都有一个名为 Pump_event 的脚本。我想要做的是将带有真正布尔值(损坏)的游戏对象添加到列表中,以便我可以创建所有损坏电机的 GUI 列表(然后对这些电机采取进一步措施)。
使用当前代码,它可以很好地实例化数组,但是当其中一个电机布尔值更改为 true 时,列表倾向于在每个更新周期不断地将电机游戏对象添加到列表中。所以我想要的是找出一种将游戏对象添加到列表 ONCE 的方法。
将它放在 update() 中可能不是最好的方法,但我真的被困在如何处理这个问题上。
G
我的问题的解决方案
感谢您的回答,您的回答都经过深思熟虑。我很感激。我没有采用 1 人方法,而是采用了此处找到的逻辑方法来处理我的脚本。
这就是我所做的。 在我的 pump_event 脚本中,事件被分类在一个案例中,并且随着泵上的损坏增加,事件会升级。所以我在该脚本中添加了一个部分,以包括“报告”损坏。
public class Pump_event : MonoBehaviour
//The damage has taken place and event_category=0\\
switch (event_category)
{
case 0:
Master_script.GetComponent<Control_room>().AddtoList (gameObject);
event_category = 1;
break;
我接受了不要插入这些类型的编程的建议,并将其放入单独的类中,效果很好。
public class Master_script: MonoBehaviour
public void AddtoList(GameObject motor_tobadded)
{
BrokenMotor_list.Add(motor_tobadded);
}
这也消除了对包含所有泵事件控制器的阵列的需求。 现在脚本一切正常。它可能不是最有效的,但它正在完成它的工作。
再次感谢所有提供帮助的人。
【问题讨论】: