Taş*_*şah 1 c# arrays foreach for-loop
我在 Unity3D 中有一个 C# 数组类型的 Transform 对象。要赢得比赛,所有图片的 rotation.z 值必须为 0。
Transform[] Pictures;
if (Pictures[0].rotation.z == 0 &&
Pictures[1].rotation.z == 0 &&
Pictures[2].rotation.z == 0 &&
Pictures[3].rotation.z == 0 &&
Pictures[4].rotation.z == 0 &&
Pictures[5].rotation.z == 0)
{
YouWin = true;
//WinText.enabled = true;//.SetActive(true);
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentSceneIndex + 1);
}
Run Code Online (Sandbox Code Playgroud)
但这是丑陋的方式。如果数组扩展,游戏不会结束。因此,我尝试编写新代码以使事情变得更容易。但不能。
foreach (var item in Pictures)
{
if (item.rotation.z == 0)
{
YouWin = true;
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentSceneIndex + 1);
}
}
Run Code Online (Sandbox Code Playgroud)
foreach 不能正常工作。在第一个图像中存在于 foreach。必须检查每个图像的 rotation.z 值。
for (int i = 0; i < Pictures.Length; i++)
{
if (Pictures[i].rotation.z ==0)
{
YouWin = true;
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentSceneIndex + 1);
}
}
Run Code Online (Sandbox Code Playgroud)
"for" 与 foreach 的结果也相同。我认为它需要嵌套 for 或 foreach。如果它们的 rotation.z 值等于 0,我如何检查所有项目?谢谢你。
要赢得比赛,所有
picture的rotation.z价值都必须是0。
让我们在Linq 的帮助下实现它All:
using System.Linq;
...
if (Pictures.All(picture => picture.rotation.z == 0)) {
// Win
YouWin = true;
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentSceneIndex + 1);
}
Run Code Online (Sandbox Code Playgroud)
如果你想循环,你可以反转逻辑 -YouWin == true如果我们没有反例(item.rotation.z != 0)
// we win...
YouWin = true;
foreach (var item in Pictures)
if (item.rotation.z != 0) {
// ... unless we don't win
YouWin = false;
break;
}
if (YouWin) {
// Win
int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
SceneManager.LoadScene(currentSceneIndex + 1);
}
Run Code Online (Sandbox Code Playgroud)