C# 检查相同颜色的4个是否在同一碰撞器中

C# 检查相同颜色的4个是否在同一碰撞器中,c#,unity3d,C#,Unity3d,我有4个碰撞器,应该检查是否有4个相同颜色的碰撞器 它们都有相同的标签(平铺) 白色块是碰撞器,但在本例中,只有左上角、右上角、左下角和右下角碰撞器才是重要的。他们应该检查是否与四种颜色的匹配发生碰撞,不管是哪种颜色 我怎样才能让这些对撞机检测到呢?我认为最简单的方法是使用一组s。您可以从碰撞器中获取游戏对象,然后检查它们的材质,看看它们是什么颜色。FireSquid的解决方案应该可以工作 如果没有,这里有一个命题 您可以在代码中创建一组引用,而不是在白色碰撞器必须通过碰撞检测周围对象颜色的

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

它们都有相同的标签(平铺)

白色块是碰撞器,但在本例中,只有左上角、右上角、左下角和右下角碰撞器才是重要的。他们应该检查是否与四种颜色的匹配发生碰撞,不管是哪种颜色


我怎样才能让这些对撞机检测到呢?

我认为最简单的方法是使用一组s。您可以从碰撞器中获取游戏对象,然后检查它们的材质,看看它们是什么颜色。

FireSquid的解决方案应该可以工作

如果没有,这里有一个命题

您可以在代码中创建一组引用,而不是在白色碰撞器必须通过碰撞检测周围对象颜色的位置进行碰撞器检查

这可能只对少量和固定数量的对撞机有效,至少以我目前的方式,但它会工作

简单地说

  • 每个白色碰撞器都应该有一个参考变量,用于较大的彩色碰撞器

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

编辑:详细的解决方案

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;
    }
}
public List\u渲染器//在这里,您必须在inspector中手动添加多维数据集。
颜色-颜色匹配//这将在代码中自动设置。
公共bool CheckIfColorsMatch(){
CheckIfValidVariables();
对于(int i=0;i<\u renders.Count;i++)
{
如果(i==0)
{
_ColorToMatch=_渲染器[i].material.color;
}
如果(!\u渲染器[i].material.color.Equals(\u ColorToMatch))
{ 
//如果颜色不匹配,则返回false。
返回false;
}
} 
//如果所有颜色都匹配,则返回true。
返回true;
}
无效CheckIfValidVariables(){
如果(_renders==null)
{
//渲染器列表未启动。
Log(“渲染器列表未启动”);
回来
}
如果(_Renderers.Count==0)
{
//没有将渲染器设置为引用。
Log(“没有将渲染器设置为引用”);
回来
}
}

您需要发布您迄今为止尝试过的内容。看看如何创建一个。我知道,但这没有真正意义,也不起作用,所以我不认为这样做有什么意义。嗯。。我不太明白你的意思,但没问题。我想我找到了办法。我只需要知道如何按名称检查列表是否包含4个对象。我尝试了这一点,但这给出了一个错误,因为您只能使用1个对象来检查它:我的意思是,您可以创建公共变量或序列化的私有变量,以便在将脚本添加到对象时,它们在统一的Inspector GUI中可见。然后,您可以将颜色立方体从层次结构拖到Inspector GUI变量字段,将它们连接起来。我编辑了上面的答案并添加了一个代码示例。我将所有多维数据集添加到列表中,但它总是返回True(很抱歉响应太晚)。如果使用我在上面发布的方法,错误可能在以下行中:If(!\u Renderers[I].material.color.Equals(\u ColorToMatch)),那么代码如何比较颜色。试着用这个代替。如果(\u Renderers[i].material.color!=\u ColorToMatch)不起作用,请发布代码。这也会返回True。我注意到如果我运行Debug.Log
(_Renderers[I].material.color))
它总是返回
RGBA(1.000,1.000,1.000,1.000)
我也在列表中将Render更改为spritenderer,但这也不起作用。我还尝试将列表从SpriteRenderer更改为Color,然后在inspector中指定4x4颜色,与瓷砖相同。然而,这总是返回False。我的代码与您的脚本中的代码相同<当按下旋转平铺的按钮时,将调用代码>CheckIfColorsMatch()。