C# Unity,如何一次更新一个UI元素

C# Unity,如何一次更新一个UI元素,c#,unity3d,C#,Unity3d,我是Unity的新手,想做一个数独解算器。我使用画布中的输入字段设计了输入网格。这些输入字段可以显示我在网格脚本中生成的数字,该脚本将保存求解逻辑。我的问题是,当某个值更改但无法正确获取时,我想更新循环中的输入字段以显示(如果有输入字段,则将所有输入字段更新为新值)。当前,循环完成后(在下一帧中)将显示所有内容,但我需要在循环运行时更新这些值。有什么想法吗 using System.Collections; using System; using System.Collections.Gener

我是Unity的新手,想做一个数独解算器。我使用画布中的输入字段设计了输入网格。这些输入字段可以显示我在网格脚本中生成的数字,该脚本将保存求解逻辑。我的问题是,当某个值更改但无法正确获取时,我想更新循环中的输入字段以显示(如果有输入字段,则将所有输入字段更新为新值)。当前,循环完成后(在下一帧中)将显示所有内容,但我需要在循环运行时更新这些值。有什么想法吗

using System.Collections;
using System;
using System.Collections.Generic;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;
using System.Diagnostics;
using Debug = UnityEngine.Debug;

public class SudokuGrid : MonoBehaviour
{
    public InputField v00, v01,v02, v03, v04, v05, v06, v07, v08;

    private int[,] arr = new int[9, 9];

    public void Upd()
    {
        v00.text = arr[0, 0].ToString();
        v01.text = arr[0, 1].ToString();
        v02.text = arr[0, 2].ToString();
        v03.text = arr[0, 3].ToString();
        v04.text = arr[0, 4].ToString();
        v05.text = arr[0, 5].ToString();
        v06.text = arr[0, 6].ToString();
        v07.text = arr[0, 7].ToString();
        v08.text = arr[0, 8].ToString();

    }
    void Start()
    {
    }

    void Update()
    {

        int c = 1;
        for (var a = 0; a < 9; a++)
        {
            for (var b = 0; b < 9; b++)
            {
                arr[a, b]  = c;
                c++;
                Upd();
                //need to update all the inputfields here to display on screen
            }
        }      
    }
}
使用系统集合;
使用制度;
使用System.Collections.Generic;
使用系统线程;
使用UnityEngine;
使用UnityEngine.UI;
使用系统诊断;
使用Debug=UnityEngine.Debug;
公共类数独网格:单行为
{
公共输入字段v00、v01、v02、v03、v04、v05、v06、v07、v08;
私有整数[,]arr=新整数[9,9];
公共无效Upd()
{
v00.text=arr[0,0].ToString();
v01.text=arr[0,1].ToString();
v02.text=arr[0,2].ToString();
v03.text=arr[0,3].ToString();
v04.text=arr[0,4].ToString();
v05.text=arr[0,5].ToString();
v06.text=arr[0,6].ToString();
v07.text=arr[0,7].ToString();
v08.text=arr[0,8].ToString();
}
void Start()
{
}
无效更新()
{
int c=1;
对于(var a=0;a<9;a++)
{
对于(var b=0;b<9;b++)
{
arr[a,b]=c;
C++;
Upd();
//需要更新此处的所有输入字段以显示在屏幕上
}
}      
}
}

首先,您可以使用9x9输入字段数组,它更具可读性

public InputField[,] InputFields;
然后可以使用for循环更新所有阵列:

for (int x = 0; x < 9; x++)
{
    for (int y = 0; y < 9; y++)
    {
        InputFields[x, y].text = arr[x, y];
    }
}      
for(int x=0;x<9;x++)
{
对于(int y=0;y<9;y++)
{
输入字段[x,y].text=arr[x,y];
}
}      
或 您可以使用on value change事件来检测字段中的用户输入,以仅更新这样更改的字段

这就是存在的原因
void Start()
{
开始例行程序(RevealNumber());
}
IEnumerator RevealNumber()
{
int c=1;
对于(var a=0;a<9;a++)
{
对于(var b=0;b<9;b++)
{
arr[a,b]=c;
C++;
Upd();
//等待1秒。
返回新的WaitForSeconds(1);
}
}      
}

请显示您的代码(同时阅读)我仍然不确定您的问题是什么-您希望在什么时候更改显示的数字?这也是C代码,而不是UnityScript。数字在代码中更改,但在游戏屏幕上不会更改。我希望能够看到代码如何改变游戏屏幕上的inputfield值我们没有更新到游戏屏幕上的值,只有在循环完成后,所有内容都会立即显示在屏幕上,即使我在循环中设置了睡眠,所有输入字段值都会同时更改,那么您必须在
update
中一次只更新一个值-UI无法在
update
运行的同时呈现,但是如何分配2darray值然后在InspectorUF中,它是一个易于使用的列表(它在inspector中可见),或者您可以在inspector中阅读有关2d数组的信息
void Start()
{
    StartCoroutine(RevealNumber());
}

IEnumerator RevealNumber()
{

    int c = 1;
    for (var a = 0; a < 9; a++)
    {
        for (var b = 0; b < 9; b++)
        {
            arr[a, b]  = c;
            c++;
            Upd();
            //waits for 1 second.
            yield return new WaitForSeconds(1);
        }
    }      
}