繁体   English   中英

Unity 3D / 2D中的C#:我是否需要为每个脚本使用Classes?

[英]C# in Unity 3D/2D: Am I required to use Classes for every script?

一点背景: 我是C#和Unity的新手,但是很快就能赶上。 我也希望这个主题不会引发关于课程和抽象编码优点的争论,因为那场辩论是无关紧要和陈旧的(并且不必要地加热); 所以请记住这一点。

我只是想知道Unity中的每个C#脚本是否都需要以任何方式或任何原因拥有主类。

或者,可以将方法和变量写在一个空白文件(带名称空间)的类之外,以便在视频游戏中使用吗?

我问,因为当我创建一个新的C#脚本时,它似乎强迫一个类进入我的文件,我害怕破坏它。

  • 我希望将代码抽象保持在最低限度,而我正在处理的当前项目有几种情况,其中不需要类,或者只使用该类的一个实例。 我想在这些情况下避免使用类。

在声明/定义任何类之外的变量和方法方面, 你无法在C#中真正做到这一点 这不是语言的设计方式(我链接的问题的答案扩展了这个想法,所以我不会在这里复制它们)。

但是,你并非没有选择; 如果你有许多变量或方法需要从不同的地方访问而不需要对象引用,你可以将它们设置为static ,这样你就不需要实例化类来使用它们:

public class UtilityClass
{
    public static float GravityConstant = 3.51f;
    public static string GameName = "MyFirstGame";

    public static float CalculateProduct(float a, float b)
    {
        return a * b;
    }
}

然后,您可以通过名称访问该类的方法/成员来引用它们:

float product = UtilityClass.CalculateProduct(6, 1.5f);

您可以使用此模式的示例是定义未包含在Unity的Mathf方法中的数学公式,并在多个类中使用它们。

附加说明:通过Unity的编辑器UI创建一个新的C#脚本将默认声明一个从Monobehaviour继承的同名类。 如果您不需要Monobehaviour任何方法/属性,则可以更改它以从Monobehaviour删除继承,从而避免不必要的开销。 这方面的一个例子是你永远不需要实例化的静态类。

  1. 首先,您需要检查方法定义的官方文档

    “通过指定访问级别(如公共或私有......) 在类或结构 中声明方法。

    因此,Method应该在类或结构中声明,理想情况下,给定的类应该只负责一个任务。 另见

  2. 您的这个问题“或者,方法和变量可以写在一个空白文件(带名称空间)的类之外,以便在视频游戏中使用吗?” 答案隐藏在下面的问题中。

    没有Class可以在C#中独立运行吗? 不。将它们设置为静态,如果它们确实不适合您现有的任何类,则将它们放在静态实用程序类中。

    您必须创建一个类才能使用方法或其变量实例类或静态类。

  3. 我是否需要为每个脚本使用Classes? 每个脚本都意味着您需要一个类。 Unity支持基于组件的架构设计 ,如果您需要任何与脚本相关的工作,那么您肯定需要一个脚本组件,这意味着一个类需要。

  4. 最后对于singleton ,感谢Unity3dWiki提供了非常详细的信息。 如果您记住Unity3d的基于组件的体系结构,我认为编写和编写类会很舒服。

  5. Singleton vs Static :我还建议检查一下: 如果Static类用于此目的,为什么要使用Singleton类

希望它会有所帮助。

[注意:如果这有用,任何人都可以更新此答案以供将来参考和使用]。

是的,你是。

在C#中,全局变量和函数之类的东西不存在。 一切都必须包含在课堂上。

“但是我应该做些什么来宣布一些可以在任何地方访问的东西,而无需创建一个对象?” 您询问。 有一种称为静态修饰符的东西。 您可以访问使用此修饰符标记的方法或变量或字段或属性,而无需创建该类的对象。

您只需在方法中添加单词static ,它就变成了静态方法! 多么简单!

我们来看一个例子吧。

我有这种非静态方法:

public class MyClass {
    public void DoStuff () {

    }
}

我可以这样称呼它:

var obj = new MyClass();
obj.DoStuff();

但如果我用static修改它,

public class MyClass {
    public static void DoStuff () {

    }
}

我可以这样称呼它:

MyClass.DoStuff();

多方便啊!

注意:

请不要滥用静态修饰符! 只有在有意义的时候才使用它! 什么时候? 当方法是实用方法或方法不属于单个对象而是类本身时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM