Skip to main content

Markdown Test Page_Unity 開發技巧、格式、慣例

資料夾結構 Folder Structure

Unity 專案的檔案結構依照各個專案、開發者的不同而有所歧異,不過最重要的是==保持整個專案的一致性。==

:::success 例如:

Assets
|---Audio
|---Fonts
|---Materials
|---Models
|---Prefabs
|---Resources
    |---Prefabs
|---Scenes
|---Scripts
    |---MainGame
    |---MainUI
|---Sprites
|---Texture

或是

Assets
|---Art
    |---Materials
    |---Models
    |---Sprites
    |---Texture
|---Audio
|---Fonts
|---Prefabs
|---Resources
|---Scenes
|---Scripts
    |---MainUI
    |---MainGame

:::

沒有特別的規定,==不要把各種無關或不同類別的東西混在一起==就好,拜託 🙏

:::info

Unity 有一些特殊的資料夾名稱,他們有特別的意義:

  • Editor
    • 編輯器專用腳本,建置不會打包
  • Plugins
    • 輸出平台專屬 library
    • 例如 Android 的 jar/aar 檔會放在 Plugin/Android/ 底下
  • Resources
    • 裡面所有的資源可以用 Resources.Load(相對路徑)讀取出來
    • 但請注意裡面所有的資源在建置時都會全部打包,不論是否有被引用。
  • StreamingAssets
    • 建置時檔案會原封不動的輸出,可以直接使用檔案讀寫 (除了 Android, WebGL)。 https://docs.unity3d.com/Manual/StreamingAssets.html
  • {檔案/資料夾名稱}~ / .{檔案/資料夾名稱} (忽略檔案/資料夾)
    • 只要檔案/資料夾前面加個 .、或是後面加個 ~,都會被 Unity 給忽略。

這些資料夾不論在專案的哪一層,Unity 只要看到這名字都會判定為特殊資料夾。

其餘詳見 https://docs.unity3d.com/Manual/SpecialFolders.html :::

腳本 Scripts

命名習慣 Naming Convention

==檔案命名盡量與其中包含的 class 相同== (MonoBehaviour 則是強制要相同)

而如何取名?看得懂就好,==最好讓別人能看檔案名稱就知道這程式大概是在幹嘛。==

:::success DO

  • MainUIController.cs
  • AimCameraToPlayer.cs
  • BreathSensorConfig.cs
  • ResultData.cs

DON'T

  • AAA.cs
  • Board.cs
  • Test_EnemyTask.cs :::

檔案結構 File Structure

:::success Example:

Assets
|---Scripts
    |---Api
        ...
    |---Models
        |---ResultData.cs
        ...
    |---MainGame
        |---MainGameController.cs
        |---Player
            |---PlayerController.cs
            ...
        |---UI
            |---MainGameUI.cs
            ...
        ...
    |---MainUI
        |---MainUiController.cs
        ...
    ...
...

:::

程式碼風格與格式 Code Style & Practice

根據微軟發布之 C#語言 guideline

  • ==class 與 method name 使用 PascalCase== (所以檔名通常也是)
  • ==local variable 跟 parameter 通常使用 camelCase==

其他包含

  • 大括號放下面
  • indent 空 4 格

而關於命名習慣,Unity 官方提出過 guideline:

  • ==一般使用名詞作為變數名稱==
    • bool 例外,e.g. isGameOver, hasWeapon
    • event/action 例外 e.g. OnClick, OnSkillActivate
  • ==不要使用意義不明或過度簡化的名稱==
    • 錯誤範例:test, a, rtt, msvmtSpeed
    • 除非該值是出自數學或是有明確、易理解的意義 e.g. pi, playerHp
  • ==public field使用 PascalCase;非 public field 選用 camelCase==
    • 非 public 變數為了與區域變數區分有一些變體,例如前加底線_、或是使用 m_m 前綴

:::success

csharp
/// <summary>
/// Some info about MyClass bruhbruhbruh
/// </summary>
public class MyClass
{    
    public static float MyStaticPublicField = 487.63f;
    private static double _myStaticPrivateField = 94.87;
    
    public int MyPublicField = 94;    
    private int _myPrivateField = 87;
    protected int _myProtectedField = 63;
    
    protected bool isMyMethodCalled = false;
    public UnityEvent OnMyMethodCalled = new UnityEvent();
    
    public void MyMethod(int myParameter)
    {
        int myLocalVar = 0;
        isMyMethodCalled = true;
        OnMyMethodCalled.Invoke();
    }
}

:::

以上皆非強制,不要讓接手你的 code 的人看到氣鼓鼓大概就沒問題 🥰

撰寫註解 Writing Comments

請看上面綠框中的範例,MyClass 上方有個 summary 的部分,裡面可以記載關於這個 class 裡面的註解。

==所有變數/函式都可以寫 summary==,一般在設定好的編輯器只要打三次 / 會自動產生 <summary></summary> 模板。==滑鼠移到該變數/函式上面就會顯示該註解==。

另外關於程式執行的段落也請==適當撰寫註解,提升程式可讀性==。

:::success Example

:::

版本控制 (git) Version Control

實驗室是使用 git 做版控,有自己的 git server,帳號請洽學長姊協助申請。

關於 git 版控,有些人使用 GUI (e.g. SourceTree),或是比較硬核的人可能直接打指令,當然各家編輯器大多也支援 git,挑個順手的就好。

不論你用什麼,==請務必在 Unity 專案頂層 (有 Assets/ Library/ 等等的資料夾) 加上 .gitignore 檔案==,標示哪些東西不需要上傳: Unity 專案的 .gitignore

:::success ![](https://hackmd.io/_uploads/SyY1SJSW6.png =220x) ![](https://hackmd.io/_uploads/r1AzBJHZ6.png =250x) vscode 加上 .gitignore 前後的差異

請確定路徑,不然很多不需要的東西都會打包上去 :::

Tips

如何跨場景傳參數

  • 使用 PlayerPrefs 儲存參數
  • 使用 DontDestroyOnLoad 偷渡某個物件過場景 (不過要記得刪除)

如何用 VSCode 開發

:::info 安裝 Unity 時如果沒特別點掉,會連帶幫你安裝 Visual Studio,可以直接用那個就好。 但是如果你跟我一樣比較喜歡 VSCode,就看這吧😉

:::spoiler 點擊展開😉

  1. 安裝 Unity 套件

  2. 開啟 Unity > Window > Package Manager,如果有看到 Visual Studio Code Editor,請移除。

  3. 同樣畫面,請升級 Visual Studio Editor 至 2.0.20 以上版本

  4. Unity > Edit > Preferences > External Tools 選擇 External Script Editor 為 VSCode,確認底下有一排小字 Visual Studio Editor v.X.X.XX Enabled,按底下的 Regenerate project files

:::


God Knows... :musical_note: