检查4个相同颜色是否在同一个对撞机中

时间:2017-09-09 15:59:05

标签: c# unity3d

我有4个碰撞器,应检查该碰撞器中是否有4种相同的颜色。

https://i.gyazo.com/2e63ce683c7ee023124a7065013f6cda.png

它们都有相同的标签(Tile)。

白色块是碰撞器,但在这种情况下,只有左上角,右上角,左下角和右下角碰撞器很重要。他们应该检查它们是否与四种颜色的匹配相撞,并不重要。

https://i.gyazo.com/aa918f7d02b3b385f96b05e328906dff.png

如何使这些碰撞者发现它?

2 个答案:

答案 0 :(得分:0)

FireSquid的解决方案应该可行。

如果没有,这是一个命题。

而不是使对撞机检查白色碰撞器必须通过碰撞检测其周围物体的颜色,而不是在代码中制作一组参考。

这可能只对小型和固定数量的对手有效,至少我提出它的方式,但它会起作用。

简单地说。

  • 每个白色对撞机应该有较大颜色的对撞机的参考变量。

  • 然后,您可以通过这些引用检查它们的颜色,这应该是每个对象的Renderer组件的可获取材料。

编辑:详细解决方案。

public List<Renderer> _Renderers; //here you must add the cubes manually in the inspector.

Color _ColorToMatch; //this will automatically be set in the code.

public bool CheckIfColorsMatch() {
    CheckIfValidVariables();
    for (int i = 0; i < _Renderers.Count; i++)
    {
        if (i == 0)
        {
            _ColorToMatch = _Renderers[i].material.color;
        }
        if (!_Renderers[i].material.color.Equals(_ColorToMatch))
        { 
            //If colors don't match, return false.
            return false;
        }
    } 
    //If all colors match, return true.
    return true;
}

void CheckIfValidVariables() {
    if (_Renderers == null)
    {
        //Renderer list no initiated.
        Debug.Log("Renderer list no initiated.");
        return;
    }

    if (_Renderers.Count == 0)
    {
        //No renderers set as reference.
        Debug.Log("No renderers set as reference.");
        return;
    }
}

答案 1 :(得分:-1)

我认为最简单的方法是使用Physics2D.OverlapBoxAll来获取Collider2D的数组。您可以从碰撞器中获取游戏对象,然后检查其材料以查看它们的颜色。