【问题标题】:C# Variable not changing after Assignment, Change shows in UIC# 变量在赋值后没有改变,改变在 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

标签: c# unity3d photon


【解决方案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 循环不会将每个文本都作为对象吗?
猜你喜欢
  • 1970-01-01
  • 2021-05-11
  • 2021-10-30
  • 2014-12-02
  • 2012-07-02
  • 2020-10-30
  • 1970-01-01
  • 2023-03-26
相关资源
最近更新 更多