Unity3D C# - 变量范围
Posted
技术标签:
【中文标题】Unity3D C# - 变量范围【英文标题】:Unity3D C# - Scope of variables 【发布时间】:2014-02-13 21:12:11 【问题描述】:我正在将我的 Unity3D 游戏从 JS 转换为 C#,但我在使用此功能时遇到了一些问题:
void ReorientationNaming(GameObject g)
///find the cube and its bounds
GameObject tobename = g;
Bounds cubebound = tobename.renderer.bounds;
string namex;
string namey;
string namez;
GameObject[] allAxisList = GameObject.FindGameObjectsWithTag("AxisPlain");
foreach(GameObject allAxis in allAxisList)
Bounds axisbound = allAxis.renderer.bounds;
if (cubebound.Intersects(axisbound))
if (allAxis.name.Contains("x"))
namex = allAxis.name;
namex = namex.Substring(1,1);
//print("namex" + namex);
if (allAxis.name.Contains("y"))
namey = allAxis.name;
namey = namey.Substring(1,1);
if (allAxis.name.Contains("z"))
namez = allAxis.name;
namez = namez.Substring(1,1);
tobename.name = namex+namey+namez;//<-- this line is the problem!
最后一行给我错误:
Assets/Cumetry/MainGameLogic.cs(136,41): error CS0165: Use of unassigned local variable `namex'
Assets/Cumetry/MainGameLogic.cs(136,41): error CS0165: Use of unassigned local variable `namey'
Assets/Cumetry/MainGameLogic.cs(136,41): error CS0165: Use of unassigned local variable `namez'
我相信这是我声明字符串的方式。知道如何解决这个问题吗?
【问题讨论】:
发生这种情况的原因是,当您的字符串对象在tobename.name = namex+namey+namez;
行上使用时,它们可能会被取消分配(没有值)。按照@DaveDev 的建议创建它们时只需分配一个空白值
【参考方案1】:
改变
string namex;
string namey;
string namez;
到
string namex = string.Empty;
string namey = string.Empty;
string namez = string.Empty;
【讨论】:
哇!快速准确!谢谢!愿意更深入地解释一下吗?? 这是因为string
的默认值是null
。有比我更好的人可以解释它。检查这个:***.com/questions/14337551/…。如果答案是正确的,请接受它作为正确答案以及 *** 上对您有帮助的任何其他答案。
另外@sooon 请注意,如果前面的条件都不为真,您的代码中没有其他内容可以设置这些变量,因此它们有可能为空。【参考方案2】:
这是因为局部变量不像对象的实例变量那样被自动初始化。
示例:
public class Test1
int number; // this gets initialized automatically to zero (0).
void TestMethod()
int local; // in C#, you're required to manually initialize it.
您可能想查看这个以获得更多解释。 Why compile error "Use of unassigned local variable"?
【讨论】:
以上是关于Unity3D C# - 变量范围的主要内容,如果未能解决你的问题,请参考以下文章