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

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

一些背景知识: 我是 C# 和 Unity 的新手,但很快就上手了。 我也希望如此thread 将 not 引发关于 classes 和抽象编码的优点的辩论,因为该辩论 无关 并且陈旧(和不必要的加热);所以请记住这一点。

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

或者,方法和变量是否可以写在 class 之外的空白文件(带有命名空间)中以用于视频游戏?

我问是因为,当我创建一个新的 C# 脚本时,它似乎将 class 强加到我的文件中,我害怕破坏东西。

在 declaring/defining 之外的任何 class、you can't really do that in C# 变量和方法方面。这不是语言的设计方式(我链接到的问题的答案扩展了那个想法,所以我不会在这里重复它们)。

不过,您并非没有选择;如果你有许多变量或方法需要从不同的地方访问并且不需要对象引用,你可以使它们 static,这样你就不需要实例化 class使用它们:

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;
    }
}

然后,您可以通过其名称访问它来引用 class 的 methods/members:

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

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

补充说明:通过 Unity 的编辑器 UI 创建新的 C# 脚本将默认声明继承自 Monobehaviour 的同名 class。如果您不需要 class 的任何 methods/attributes,您可以更改它以从 Monobehaviour 中删除继承,这样可以避免不必要的开销。一个例子就是使用静态 class,您永远不需要实例化。

  1. 首先你需要检查 Methods 在哪里定义为官方 文档说明

    "Methods are declared in a class or struct by specifying the access level such as public or private...."

    因此,方法应在 Class 或结构中声明,并且 A 给定 class 理想情况下,应该只负责一项任务。(see also)

  2. 你这个问题"或者相反,方法和变量都可以 写在 class 之外的空白文件(带有名称空间)中 在视频游戏中使用?答案隐藏在下面的问题中。

    Can there be stand alone functions in C# without a Class? 没有。如果它们确实不适合您现有的任何 classes.

    ,请将它们设为静态并将它们放入静态实用程序 class

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

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

  4. 终于 singleton,感谢 Unity3dWiki 非常详细 可用的。我想你会觉得编码和写作很舒服 class 如果您还记得 Unity3d 的基于组件的架构。

  5. Singleton vs Static:我也建议检查一下:Why do you use a Singleton class 如果静态 class 达到目的

希望对您有所帮助。

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

是的,你是。

在C#中,全局变量和函数之类的东西是不存在的。 所有内容 都必须包含在 class 中。

"But what should I do in order to declare some stuff that can be accessed everywhere, without creating an object?" 你问了。有一种叫做 static 修饰符 的东西。您可以访问用此修饰符标记的方法或变量或字段或属性,而无需创建该 class.

的对象

你只要在一个方法中加上static这个词,它就变成了一个静态方法!多么简单!

让我们看一个例子。

我有这个非静态方法:

public class MyClass {
    public void DoStuff () {

    }
}

我可以这样称呼它:

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

但是如果我修改为static,

public class MyClass {
    public static void DoStuff () {

    }
}

我可以这样称呼它:

MyClass.DoStuff();

多么方便!

注:

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