C# 变量在赋值后没有改变,改变在 UI 中显示

Posted

技术标签:

【中文标题】C# 变量在赋值后没有改变,改变在 UI 中显示【英文标题】:C# Variable not changing after Assignment, Change shows in UI 【发布时间】:2021-06-26 08:02:18 【问题描述】:

在我的记分牌 U​​I 中,我有一个框,它只是一个图像,里面有 Score_Entries 作为子项。有 4 个孩子,游戏中每个玩家一个。当记分板启动时,我有一个函数可以在 Score_Entries Ui 元素中分配文本。为此,我有一个名为 Text[] playerNames 的数组,我的 UI 元素在检查器中被拖入其中。

int i = 0;
foreach (Player test in PhotonNetwork.PlayerList)

    playerNames[i].text = test.NickName;
    allscores[i].text = 0.ToString();
    i++;
    Debug.Log("Text inside the array: " + playerNames[i].text);
    Debug.Log("Player Name: " + test.NickName);

如您所见,我已将第一个 Text 元素中的文本设置为玩家的姓名。然而,应该发生的是在调试语句中播放器名称行输出和数组输出中的文本应该显示存储在test.NickName 中的字符串。说测试是玩家的名字。 playersNames[i].text should == test 目前它显示 playerNames[i] = TEST NAME 这是我创建 UI 时的默认文本。但是,在游戏中,玩家的名字正确显示为 test 而不是 TEST NAME。

我不明白这是如何工作的,有人可以帮忙吗?

【问题讨论】:

在分配数组和记录之间对您的 i++ 有点困惑...您将始终尝试记录数组的 next 项...不是你刚刚分配的那些 我首先对逻辑进行了编码,然后添加了 Debug 语句以查看哪里出错了。我错过了我在语句中使用 i 【参考方案1】:

问题是我++ 把 i++ 放在后面

Debug.Log("Text inside the array: " + playerNames[i].text);
Debug.Log("Player Name: " + test.NickName);
i++

【讨论】:

谢谢!我的下一个问题是我在其他代码中使用此数组,但它看不到我更改的新名称 你必须更改为 foreach (PhotonNetwork.PlayerList 中的玩家测试) playerNames[i].text = test[i].NickName; allscores[i].text = 0.ToString();我++; Debug.Log("数组内的文本:" + playerNames[i].text); Debug.Log("玩家姓名:" + test[i].NickName); 我想在另一个脚本中访问数组,所以我希望 playerNames[0] 等于 test.NickName 但它是 TEST NAME。那么我会通过 playerNames[i].NickName 访问它吗? 为什么需要 test[i] 而不是 test.text? for each 循环不会将每个文本都作为对象吗?

以上是关于C# 变量在赋值后没有改变,改变在 UI 中显示的主要内容,如果未能解决你的问题,请参考以下文章

c语言如何通过函数来改变已经赋初值的全局变量的值?

如何修改全局变量的值

常量数据与只读字段

为啥不能用赋值语句将一个字符串常量直接赋给一个字符数组

%CMDCMDLINE% 特殊变量被神奇地改变了,虽然没有赋值

微信小程序计算后,怎么赋值给变量,而且在页面中输出呢?