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# - 变量范围的主要内容,如果未能解决你的问题,请参考以下文章

unity3d 全局单例脚本怎么用

Unity3D C#数学系列之点积

Unity3D中JavaScript与C#对比

Unity3d在屏幕范围内随机生成一个圆

unity3d脚本语言中的引用类型

unity3d c#支持热更吗