Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Unity editor中处理不可见的c#名称空间?_C#_Visual Studio_Unity3d_Namespaces_Unity5 - Fatal编程技术网

如何在Unity editor中处理不可见的c#名称空间?

如何在Unity editor中处理不可见的c#名称空间?,c#,visual-studio,unity3d,namespaces,unity5,C#,Visual Studio,Unity3d,Namespaces,Unity5,unity文档建议使用名称空间来组织代码,避免扩展类名,并使代码更易于维护 ControlerCameraAction变为controllers.camera.Action和CameraAction变为camera.Action。 然而,在Unity editor中,您无法看到名称空间,只能看到最后一个类名,这可能会让人感到困惑,因为某些类现在具有相同的名称 编辑器现在显示操作和操作 那么如何在Unity中使用名称空间呢? 我做错什么了吗?简单的方法是在名称空间中思考如何创建文件文件夹。您可以为

unity文档建议使用名称空间来组织代码,避免扩展类名,并使代码更易于维护

ControlerCameraAction
变为
controllers.camera.Action
CameraAction
变为
camera.Action
。 然而,在Unity editor中,您无法看到名称空间,只能看到最后一个类名,这可能会让人感到困惑,因为某些类现在具有相同的名称

编辑器现在显示
操作
操作

那么如何在Unity中使用名称空间呢?
我做错什么了吗?

简单的方法是在名称空间中思考如何创建文件文件夹。您可以为系统和unity命名空间指定所需的名称,避免使用类似的名称。另一个命名空间中的每个命名空间类似于在另一个文件夹中的文件夹中导航

通常以您的公司名称或插件名称开始:

namespace mycompany_name
{
    namespace myplugin_name
    {
    }
}

稍后,您将在另一个脚本中使用“using”引用它:

那么如何在Unity中使用名称空间呢

基本上和你一样。名称空间在代码中使用,而不是在编辑器中使用。统一的主要问题是处理脚本的方式。脚本在内部编译成可调试的IL代码

但在编辑器本身中,它们总是以文件名命名,文件名必须与类名相同

这就是为什么您看不到整个类型名(名称空间+类名),而总是只看到类名

我做错什么了吗

不,你不是。就我所记得的,在编辑器中没有办法显示类名而不是文件名,因为显示的数据是由Unity生成的元文件决定的

So tl;博士:

您做得很好,无法在编辑器中显示名称空间

我建议您将脚本排序到文件夹中,并使用
AddComponentMenu
-属性根据名称空间对代码进行物理组织。这与Microsoft使用的模式相同

unity文档建议使用名称空间来组织 代码,避免扩展类名,并使代码更易于维护

对!

ControlerCameraAction
变成
controllers.camera.Action
CameraAction
变为
Cameras.Action

是的,也不是

名称空间背后的思想不仅仅是简单的组织
使用名为名称空间的功能。这个组织应该遵循一个逻辑。如果每个类都有不同的名称空间,那么您必须导入与代码中使用的类一样多的名称空间

您可以从“模块”的角度来思考,或者看看分层体系结构是否对您有用

如果您有
ControllerCameraAction
CameraAction
,您可以a.-为两者使用命名空间
Cameras
(然后您将有
CameraAction
Cameras.ControllerCameraAction
),b.-如果您有一个分层的体系结构(如MVP、MVVM或更多由域设计驱动的,等等)可以使用层名称和模块创建名称空间。(然后您将有类似于
Presentation.Cameras.ControllerCameraAction
Domain.camera.CameraAction
的内容,这可以帮助您遵循一个特定的操作)


的语法如下所示:

namespace Domain.Cameras
{
    public class CameraAction 
    {
    }
}
您可以将它们与
指令一起使用

using Domain.Cameras;

namespace Presentation.Cameras
{
    public class ControllerCameraAction 
    {
        private CameraAction cameraAction;
        ...
    }
}
更多关于名称空间的信息

默认情况下,所有没有显式名称空间的类都属于
global
名称空间,因此即使您没有编写任何名称空间,您也在使用一个名称空间


统一不会在名称空间之间产生任何区别,这更像是c#特性。它有助于组织、关注点分离原则和避免名称冲突,但在最后一个例子中,您的类名仍然应该具有代表性,并且足够清晰,以理解该类的功能。如果您看到
Camera.cs
Camera.cs
很难看到什么类做什么。如果您打开这些文件并看到它们所在的名称空间/代码/文件夹,这将有所帮助,但这样做的目的是节省额外的秒数/认知负载,并更明确地显示您的名称



作为补充,您可以在这里看到另一个有趣的注释。

这是我要找的注释,AddCompentMenu可能不是必需的,因为我的脚本路径已经按照组件菜单中的名称空间进行了组织。直到你提到它,我才看到它。”(然后你会有Cameras.CameraAction和Cameras.ControllerCameraAction)“我不明白重点,类名没有改变哦,那你就得重新考虑你的名字了。我只是想展示一个原始名称的示例。
namespace Domain.Cameras
{
    public class CameraAction 
    {
    }
}
using Domain.Cameras;

namespace Presentation.Cameras
{
    public class ControllerCameraAction 
    {
        private CameraAction cameraAction;
        ...
    }
}