Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 开关矩阵_C#_Unity3d - Fatal编程技术网

C# 开关矩阵

C# 开关矩阵,c#,unity3d,C#,Unity3d,我购买了具有以下代码的开关矩阵: int amount = 27; string[] keywords = new string[amount]; bool kws[]= new bool[amount]; for(int i=0;i<amount;i++) keywords[i]=""+i; int columns = 7; int rows = 4; int index=0; int y=30+30* ind

我购买了具有以下代码的开关矩阵:

    int amount = 27;
    string[] keywords = new string[amount];
    bool kws[]= new bool[amount];
    for(int i=0;i<amount;i++)
       keywords[i]=""+i;
    int columns = 7;
    int rows = 4;
    int index=0;
    int y=30+30* index;
    int x=0;
    int element=0;
    foreach(string kw in keywords){
        element++;
        if(kws [index] = GUI.Toggle (new Rect (x, y, 100, 30), kws [index], kw)){
            Debug.Log("Selected: "+kw);
        }
        index++;
        x+=100;
        if(element>rows){
            //Reset for the next row
            x=0;
            element=0;
            y+=30;
        }
    }
int-amount=27;
字符串[]关键字=新字符串[金额];
bool kws[]=新bool[金额];
对于(int i=0;irows){
//重置为下一行
x=0;
元素=0;
y+=30;
}
}
但当我点击切换按钮时,另一个按钮显示为选中状态。它似乎是以每个区块为基础的。我仍然不知道缺陷在哪里,因为每个切换都被分配给一个不同的KW,保存它的状态

也许一个C#/Unity wiz可以在几英里之外找到问题所在

我想真正的问题是:


如何显示和跟踪一系列切换?

很难判断您要做什么。也许是这样的

const int amount = 27;
bool[] kws = new bool[amount];

void OnGUI()
{
    string[] keywords = new string[amount];
    for(int i=0;i<amount;i++)
        keywords[i]=""+i;
    int columns = 7;
    int rows = 4;
    int index=0;
    int y=30+30* index;
    int x=0;
    int element=0;
    foreach(string kw in keywords){
        element++;
        bool selected = GUI.Toggle (new Rect (x, y, 100, 30), kws [index], kw);
        if(selected && !kws [index])
        {
            Debug.Log("Selected: "+kw);
        }
        kws[index] = selected;
        index++;
        x+=100;
        if(element>rows){
            //Reset for the next row
            x=0;
            element=0;
            y+=30;
        }
    }
}
const int amount=27;
bool[]kws=新bool[金额];
void OnGUI()
{
字符串[]关键字=新字符串[金额];
对于(int i=0;irows){
//重置为下一行
x=0;
元素=0;
y+=30;
}
}
}
我的目标是:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class NewBehaviourScript : MonoBehaviour
{
    string[] keywords;
    bool[] kws;

    void Awake()
    {
        int amount = 27;
        keywords = new string[amount];
        kws = new bool[amount];
        for (int i = 0; i < amount; i++) keywords[i] = "" + i;
    }

    void OnGUI()
    {
        int columns = 4;
        int x, y;
        for (int index = 0; index < keywords.Length; index++)
        {
            x = 100 * (index % columns);
            y =  30 * (index / columns) + 30;
            bool oldValue = kws[index];
            kws[index] = GUI.Toggle(new Rect (x, y, 100, 30), kws[index], keywords[index]);
            if (kws[index] != oldValue)
            {
                Debug.Log("Switched: " + keywords[index] + " to " + kws[index]);
            }
        }
    }
}
使用UnityEngine;
使用系统集合;
使用System.Collections.Generic;
公共类NewBehaviourScript:MonoBehavior
{
字符串[]关键字;
bool[]kws;
无效唤醒()
{
整数金额=27;
关键词=新字符串[金额];
kws=新bool[金额];
对于(int i=0;i
最重要的是,您应该将初始化和使用分开,因为在原始版本中,每次都会重置切换状态,按下按钮不会产生持久的效果

第二,使用foreach循环只跳过篮筐来跟踪哪个球是个坏主意。如果关键字和kws数组真的是不可分割的,那么您可能需要创建一个类或结构来保存字符串和bool,以便它们始终在一起。我在这里展示的是次好的东西。如果你根据索引找到一个,你应该使用相同的索引来找到另一个


最后,我在其中加入了一个常见的技巧,以获得网格布局。同样,网格中的位置完全由其索引驱动。您经常会看到%(模)和/(除)这样一起使用。

基本上这就是我正在做的,只是为每个切换赋予不同的布尔值。您正在将它们初始化为kws[index],但没有跟踪进一步的更改。位置(x,y)不起作用,因为有一堆相互重叠,但除此之外,主要问题仍然存在。我会继续玩的。初始化已经完成了一次,只是在这里添加了它作为示例。