[英]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.