【发布时间】:2015-04-27 06:53:11
【问题描述】:
我在 Unity 工作,为地形隐藏/显示代码编写一些 C#。 代码有效,但是有没有办法重写它,这样我就不必每次遇到这些非常简单的情况时都写出这段冗长的代码?
以下是与这部分相关的变量:
// ...
private int terLevel = 0;
private GameObject[] t0;
private GameObject[] t1;
private GameObject[] t2;
private GameObject[] t3;
private GameObject[] t4;
private GameObject[] t5;
这是我的启动功能的相关部分:
void Start ()
{
// ...
t0 = GameObject.FindGameObjectsWithTag ("T0");
t1 = GameObject.FindGameObjectsWithTag ("T1");
t2 = GameObject.FindGameObjectsWithTag ("T2");
t3 = GameObject.FindGameObjectsWithTag ("T3");
t4 = GameObject.FindGameObjectsWithTag ("T4");
t5 = GameObject.FindGameObjectsWithTag ("T5");
}
这是我想在更新功能中修复的主要部分:
void Update ()
{
// ...
if(terLevel <= 0)
{
foreach(GameObject i in t1)
i.renderer.enabled = false;
foreach(GameObject i in t2)
i.renderer.enabled = false;
foreach(GameObject i in t3)
i.renderer.enabled = false;
foreach(GameObject i in t4)
i.renderer.enabled = false;
foreach(GameObject i in t5)
i.renderer.enabled = false;
}
else
{
if(terLevel == 1)
{
foreach(GameObject i in t1)
i.renderer.enabled = true;
foreach(GameObject i in t2)
i.renderer.enabled = false;
foreach(GameObject i in t3)
i.renderer.enabled = false;
foreach(GameObject i in t4)
i.renderer.enabled = false;
foreach(GameObject i in t5)
i.renderer.enabled = false;
}
else
{
if(terLevel == 2)
{
foreach(GameObject i in t1)
i.renderer.enabled = true;
foreach(GameObject i in t2)
i.renderer.enabled = true;
foreach(GameObject i in t3)
i.renderer.enabled = false;
foreach(GameObject i in t4)
i.renderer.enabled = false;
foreach(GameObject i in t5)
i.renderer.enabled = false;
}
else
{
if(terLevel == 3)
{
foreach(GameObject i in t1)
i.renderer.enabled = true;
foreach(GameObject i in t2)
i.renderer.enabled = true;
foreach(GameObject i in t3)
i.renderer.enabled = true;
foreach(GameObject i in t4)
i.renderer.enabled = false;
foreach(GameObject i in t5)
i.renderer.enabled = false;
}
else
{
if(terLevel == 4)
{
foreach(GameObject i in t1)
i.renderer.enabled = true;
foreach(GameObject i in t2)
i.renderer.enabled = true;
foreach(GameObject i in t3)
i.renderer.enabled = true;
foreach(GameObject i in t4)
i.renderer.enabled = true;
foreach(GameObject i in t5)
i.renderer.enabled = false;
}
else
{
if(terLevel >= 5)
{
foreach(GameObject i in t1)
i.renderer.enabled = true;
foreach(GameObject i in t2)
i.renderer.enabled = true;
foreach(GameObject i in t3)
i.renderer.enabled = true;
foreach(GameObject i in t4)
i.renderer.enabled = true;
foreach(GameObject i in t5)
i.renderer.enabled = true;
}}}}}}
}
可怕的是不是。想象一下,如果我有超过 5 个地形层,我会在我完成代码之前死去。必须有一个
【问题讨论】:
-
Code Review 会更好吗?
-
我投票结束这个问题,因为它属于CodeReview
-
如果您对这段代码的作用感到好奇,它基本上是一种将所有地形图层隐藏在您正在处理的内容之上的方法。我没有这里显示的按钮,但这里的前提是:你按下 upTerrain 按钮,它会从下往上显示一层。如果你按下 downTerrain 按钮,它会隐藏最高可见层。
-
请使用
unity3d标签回答与 Unity 游戏引擎相关的问题。在应用标签之前阅读标签描述通常是个好主意。
标签: c# if-statement foreach unity3d