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

标签 c# class unity3d unity3d-2dtools

一些背景知识: 我是 C# 和 Unity 的新手,但很快就上手了。我也希望这个帖子不会 引发了一场关于类和抽象编码优点的辩论,因为这场辩论是不相关的,而且已经过时(而且不必要地激烈);所以请牢记这一点。

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

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

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

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

最佳答案

在声明/定义任何类之外的变量和方法方面,you can't really do that in 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 中删除继承,从而避免不必要的开销。一个例子就是使用一个您永远不需要实例化的静态类。

关于Unity 3D/2D 中的 C# : Am I required to use Classes for every script?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36539708/

相关文章:

python - 合并 __init__ 中的两个列表,无需实例化。 Python

c# - 粒子统一创建星场

c# - 用前缀字符填充以始终具有 12 个字符的字符串

c# - 全局异常处理程序 ASP.Net Core MVC

c++ - 使用 push_back 在类中填充结构的值

php - 将 PHP 类作为参数传递

c# - 'main' 和 'async main' 有什么区别?

c# - 使用 Json.NET 将 JSON 反序列化为对象

c# - 尝试通过 FindObjectOfType 获取集合时找不到对象集合

android - 我们如何将 Flutter App 导入 Unity 3d