根据游戏对象的颜色维护游戏对象的实时列表



我有两个白色精灵游戏对象。一个被涂成红色,另一个被涂成绿色,使用精灵渲染器中的颜色选择器。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进入特定区域,则对象的颜色可以在游戏过程中发生变化(红色>绿色,反之亦然(。如何更新列表中的这些更改?

1( 看看这个主题:比较两个颜色对象

"要仅根据颜色的ARGB值来比较颜色,您应该使用 ToArgb 方法。这是因为平等和平等成员 确定等价性,而不仅仅是使用 ARGB 值 颜色。例如,不考虑 Black 和 FromArgb(0,0,0( 相等,因为黑色是命名颜色,而 FromArgb(0,0,0( 不是">

2(如果你有颜色变化的触发器,为什么你不在触发器处理程序中控制列表中的对象?它会更有效。 特别是如果你会在创建对象和"杀死"对象时添加一些处理程序。

3(也许你应该在Awake((方法中再次填充列表时清除列表,即使您在if之前调用Update((methor? 在"更新"中删除"死"对象,并再次添加到列表中"活动"对象。 似乎您将在没有它的情况下在列表中获得配音对象。

最新更新