[英]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
删除继承,从而避免不必要的开销。 这方面的一个例子是你永远不需要实例化的静态类。
首先,您需要检查方法定义的官方文档
“通过指定访问级别(如公共或私有......) 在类或结构 中声明方法。 ”
因此,Method应该在类或结构中声明,理想情况下,给定的类应该只负责一个任务。 ( 另见 )
您的这个问题“或者,方法和变量可以写在一个空白文件(带名称空间)的类之外,以便在视频游戏中使用吗?” 答案隐藏在下面的问题中。
没有Class可以在C#中独立运行吗? 不。将它们设置为静态,如果它们确实不适合您现有的任何类,则将它们放在静态实用程序类中。
您必须创建一个类才能使用方法或其变量实例类或静态类。
我是否需要为每个脚本使用Classes? 每个脚本都意味着您需要一个类。 Unity支持基于组件的架构设计 ,如果您需要任何与脚本相关的工作,那么您肯定需要一个脚本组件,这意味着一个类需要。
最后对于singleton ,感谢Unity3dWiki提供了非常详细的信息。 如果您记住Unity3d的基于组件的体系结构,我认为编写和编写类会很舒服。
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.