我有两个白色精灵游戏对象。一个是红色,另一个是绿色,使用Sprite渲染器中的颜色选择器。 RGB值与下面代码中的值相同。两者都有标记'对象'。
我有3个列表需要在游戏过程中不断更新 - totalObjects,redObjects& greenObjects,包含各自的游戏对象。我可以填充totalObjects,但不能填充其他两个。
这是代码 -
public List<GameObject> totalObjects = new List <GameObject>();
public List<GameObject> redObjects = new List <GameObject>();
public List<GameObject> greenObjects = new List <GameObject>();
private Color red = new Color (0.9f, 0.5f, 0.5f, 1.0f);
private Color green = new Color (0.8f, 0.8f, 0.3f, 1.0f);
void Awake()
{
totalObjects.AddRange (GameObject.FindGameObjectsWithTag("object"));
foreach (GameObject x in totalObjects)
{
if (x.GetComponent<SpriteRenderer>().color == red)
{
redObjects.Add(x);
}
else if (x.GetComponent<SpriteRenderer>().color == green)
{
greenObjects.Add(x);
}
}
}
void Update ()
{
totalObjects.RemoveAll(GameObject => GameObject == null);
redObjects.RemoveAll(GameObject => GameObject == null);
greenObjects.RemoveAll(GameObject => GameObject == null);
}
此外,如果玩家通过OnTriggerEnter2D进入特定区域,则游戏过程中的颜色可能会发生变化(红色&gt;绿色&反之亦然)。如何更新列表中的这些更改?
答案 0 :(得分:0)
1)看看这个主题:Compare two Color objects
“要仅根据其ARGB值比较颜色,您应该使用 ToArgb方法。这是因为Equals and Equality成员 使用不仅仅是ARGB值来确定等效性 颜色。例如,不考虑Black和FromArgb(0,0,0) 相等,因为黑色是命名颜色而FromArgb(0,0,0)不是“
2)如果你有颜色变化的触发器,为什么你不在触发器处理程序中控制列表中的对象?它会更有效。 特别是如果你要在创建对象和“杀死”对象时添加一些处理程序。
3)也许你应该在Awake()方法中再次填充它们时清除列表,即使你在if之前调用Update()方法? 您在更新中删除“死”对象并再次添加到列表“生活”对象。 看来你会在列表中得到被公开的对象。