【问题标题】:C# in Unity 3D/2D: Am I required to use Classes for every script?Unity 3D/2D 中的 C#:我是否需要为每个脚本使用类?
【发布时间】:2016-04-11 04:08:45
【问题描述】:

一点背景知识: 我是 C# 和 Unity 的新手,但很快就掌握了。我也希望这个帖子不会 strong> 引发关于类和抽象编码优点的辩论,因为该辩论不相关且陈旧(并且不必要地激烈);所以请记住这一点。

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

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

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

  • 我希望尽量减少代码抽象,以及当前的项目 我正在处理几种不需要上课的情况,或者 只会使用该类的一个实例。我想简单地避免 在这些情况下使用类。

【问题讨论】:

  • 嗨,约翰,简单的答案是“是的,当然”。当你说“我只想避免在这些情况下使用类。”时,别管它了,这完全没有意义。假设您有一些非常简单的任务要完成(“闪烁和关闭”呢)。好的,所以这是一行代码,在文件“Blink.cs”中一个名为“Blink”的简单类中。这里的所有都是它的。将文件放在需要“闪烁”行为的对象上。
  • 抱歉,Joe Blow,所有这些答案都非常有帮助,我很难选择正确的答案。我学到了很多,希望我能选择所有三个答案。
  • 干得好,新用户打勾很重要!你得到积分。干杯。

标签: c# class unity3d unity5 unity3d-2dtools


【解决方案1】:

就在任何类之外声明/定义变量和方法而言,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 的继承,从而避免不必要的开销。一个例子是你永远不需要实例化的静态类。

【讨论】:

    【解决方案2】:

    是的,你是。

    在 C# 中,诸如全局变量和函数之类的东西根本不存在。 所有东西都必须包含在一个类中。

    “但是我应该怎么做才能声明一些可以随处访问的东西,而无需创建对象?”你问。有一种叫做静态修饰符的东西。您可以访问使用此修饰符标记的方法或变量或字段或属性,而无需创建该类的对象。

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

    让我们看一个例子。

    我有这个非静态方法:

    public class MyClass {
        public void DoStuff () {
    
        }
    }
    

    我可以这样称呼它:

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

    但如果我用static修改它,

    public class MyClass {
        public static void DoStuff () {
    
        }
    }
    

    我可以这样称呼它:

    MyClass.DoStuff();
    

    多么方便!

    注意:

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

    【讨论】:

    • 你想卖东西吗?请不要使用这些修辞性的“多么方便/多么简单”的问题,它们不属于答案。此外,全局变量确实存在,但只在类中声明。
    【解决方案3】:
    1. 首先您需要检查Methods 定义为官方的位置 文档说明

      "方法被声明 在类或结构中通过指定访问 公共或私人等级别......”

      所以,方法应该在类或结构中声明,A given class should be, ideally, responsible for just one task.(see also)

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

      Can there be stand alone functions in C# without a Class? 没有。如果它们确实不适合您现有的任何类,请将它们设为静态并将它们放入静态实用程序类中。

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

    3. 我是否需要对每个脚本都使用类?每个脚本都意味着您需要一个类。 Unity 支持 Component Based Architectural Design 如果您需要任何与脚本相关的 工作那么你肯定需要一个脚本组件,这意味着 类要求。

    4. 终于singleton,感谢Unity3dWiki的详细介绍 可用的。我认为你会觉得编码和写作很舒服 如果您牢记 Unity3d 的基于组件的架构,则可以类。

    5. 单例 vs 静态:我也建议检查一下:Why do you use a Singleton class if a Static class serves the purpose

    希望它会有所帮助。

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

    【讨论】:

      猜你喜欢
      • 2016-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多