簡體   English   中英

Unity 3D / 2D中的C#:我是否需要為每個腳本使用Classes?

[英]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刪除繼承,從而避免不必要的開銷。 這方面的一個例子是你永遠不需要實例化的靜態類。

  1. 首先,您需要檢查方法定義的官方文檔

    “通過指定訪問級別(如公共或私有......) 在類或結構 中聲明方法。

    因此,Method應該在類或結構中聲明,理想情況下,給定的類應該只負責一個任務。 另見

  2. 您的這個問題“或者,方法和變量可以寫在一個空白文件(帶名稱空間)的類之外,以便在視頻游戲中使用嗎?” 答案隱藏在下面的問題中。

    沒有Class可以在C#中獨立運行嗎? 不。將它們設置為靜態,如果它們確實不適合您現有的任何類,則將它們放在靜態實用程序類中。

    您必須創建一個類才能使用方法或其變量實例類或靜態類。

  3. 我是否需要為每個腳本使用Classes? 每個腳本都意味着您需要一個類。 Unity支持基於組件的架構設計 ,如果您需要任何與腳本相關的工作,那么您肯定需要一個腳本組件,這意味着一個類需要。

  4. 最后對於singleton ,感謝Unity3dWiki提供了非常詳細的信息。 如果您記住Unity3d的基於組件的體系結構,我認為編寫和編寫類會很舒服。

  5. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM