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

时间:2017-08-07 12:11:47

标签: c# visual-studio unity3d namespaces unity5

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

ControlerCameraAction变为Controleurs.Cameras.ActionCameraAction变为Cameras.Action。 但是在Unity编辑器中,您无法看到您的命名空间,只能看到最后一个类名,这可能会令人困惑,因为某些类现在具有相同的名称。

编辑器现在显示ActionAction
那么如何在Unity中使用命名空间? 我做错了吗?

3 个答案:

答案 0 :(得分:2)

  

那么如何在Unity中使用命名空间?

就像你一样,基本上。命名空间用于代码,而不是编辑器中。 Unity的主要问题是处理脚本的方式。脚本在内部编译成可调试的IL-Code。

但是在编辑器本身,它们总是以它们的文件名命名,这些文件名被强制与类名相同。

这就是你没有看到整个类型名称(名称空间+类名),但始终只看到类名的原因。

  

我做错了吗?

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

所以tl;博士:

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

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

答案 1 :(得分:1)

简单的方法是在命名空间中思考文件夹的方式。您可以为系统和统一命名空间分配所需名称,避免使用类似的名另一个命名空间内的每个命名空间类似于在另一个文件夹内的文件夹内导航。

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

namespace mycompany_name
{
    namespace myplugin_name
    {
    }
}

namespace myplugin_name
{
    //part name i.e. Networking, Utils, Database or similar ramification
    namespace myplugin_part_name
    {
    }
}

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

using mycompany_name.myplugin_name

答案 2 :(得分:0)

  

统一文档建议使用命名空间来组织你的   代码,避免扩展类名,并使代码更易于维护。

是的!

  

ControlerCameraAction变为Controleurs.Cameras.Action和   CameraAction变为Cameras.Action

是的,没有。

命名空间背后的想法是组织而不仅仅是简单的use this feature called namespaces。该组织应遵循逻辑。如果每个类都有不同的命名空间,那么您将必须导入与您将在代码中使用的类一样多的命名空间。

你可以用'模块来思考'或者看看分层架构是否对你有用。

如果你有ControllerCameraActionCameraAction,你可以a.-同时使用名称空间Cameras(那么你将拥有Cameras.CameraActionCameras.ControllerCameraAction) ,b .-如果您有分层架构(如MVP,MVVM或更多DomainDesign Driven等),您可以使用图层名称和模块来创建名称空间。 (那么你会有类似Presentation.Cameras.ControllerCameraActionDomain.Cameras.CameraAction的内容,这可以帮助你关注Onion architecture

<小时/> namespaces的语法如下:

namespace Domain.Cameras
{
    public class CameraAction 
    {
    }
}

您将它们与using指令一起使用

using Domain.Cameras;

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

有关名称空间here的更多信息!

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

<小时/> Unity不会在命名空间之间产生任何差异,这更像是一个c#特性。它还有助于组织,关注点分离原则以及避免名称冲突,但在最后一个例子中,您的类名仍应具有代表性和清晰度,以便了解该类的功能。如果您看到Camera.csCamera.cs,那么很难看出哪个班级会做什么。如果您打开这些文件并查看它们所在的命名空间/代码/文件夹会有所帮助,但这个想法是保存那些额外的秒/认知负载,并且只是更明确地使用您的名字。

作为补充,您可以看到另一个有趣的discussion about namespaces use