【问题标题】:Using namespace in Unity hides functionality在 Unity 中使用命名空间会隐藏功能
【发布时间】:2016-11-06 09:10:58
【问题描述】:

将 Unity 5.4 beta 与 Hololens 结合使用,在命名空间中设置类会禁用某些 UnityEngine 功能。

如果我声明一个类,一切正常。如果我将它包装在一个命名空间中,类不会看到彼此,即使在同一个命名空间内或使用 using 添加。

创建一个 MonoBehaviour 类,我可以将它拖放到游戏对象上,如果我将该类包装在命名空间中,Unity 会抱怨它不是 MB 或者它有问题,因此无法拖动。

有人有类似的问题吗?只是在报告错误之前询问,因为 5.4 仍然是测试版。

【问题讨论】:

  • 不知道 - 你试过像 Namespace.MyClass 这样调用这些类吗?
  • 你能给我们举个例子吗?我们在代码中广泛使用命名空间并且没有这样的问题。您是否有任何地方的可选参数?
  • 明天我会在办公室发布一些代码,但几乎没有。我没有尝试使用显式命名空间进行调用,以防万一。

标签: c# unity3d namespaces


【解决方案1】:

Classes 看不到对方,因为您没有导入它们或通过它们的namespace 访问它们。要访问命名空间中的任何内容,您必须 import namespace 或调用 namespace 后跟 class 名称。检查下面的两个示例。

具有命名空间的类:

namespace MyANameSpace
{
    public class A
    {

    }
}

要查看class A,您必须使用using 关键字导入它。

using MyANameSpace;
public class B : MonoBehaviour
{
    A a;

    // Use this for initialization
    void Start()
    {
        a = new A();
    }
}

另一种方法是直接通过namespace访问它们。

public class B : MonoBehaviour
{
    MyANameSpace.A a;

    // Use this for initialization
    void Start()
    {
        a = new MyANameSpace.A();
    }
}

如果这不能解决您的问题,那么您必须发布您的代码。这可能不是错误

【讨论】:

  • 我碰巧做得很好。这在 5.3 中运行良好,我使用的是 5.4(测试版)。明天将再次检查,以防它自行修复或我做错了什么,但我尝试了很多方法,但最终总是会发现,如果一个在命名空间中,那么很好,如果两个类在不同的自定义命名空间中,那么问题。
  • @Everts 我也在使用 5.4(测试版)。有用。老兄回家后把你的代码贴出来。你可能在某个地方搞砸了。
【解决方案2】:

我设法弄清楚我认为正在发生的事情。这是我所拥有的:

namespace Company.Hololens
{
    public enum GazeState
    {
        None = -1, NoHit, Hit
    }
    public class CursorEventArg : EventArgs
    {

    }
    public class CursorController : Singleton<CursorController>
    {
    }
}

Unity 似乎不喜欢类声明的顺序。将 EventArg 推到脚本的末尾,一切正常。

不确定这是否应该被视为一个错误,我从未见过任何提及类声明顺序的内容。不过,在顶部声明一个接口很好。

【讨论】:

    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多