Learning C# by Developing Games with Unity 第三章筆記整理

閱讀時間約 10 分鐘

深入探討變數、型別和方法


正確撰寫 C# 程式碼

基本語法規則

程式碼行就像句子一樣,需要有某種分隔或結束字符。每一行 C# 程式碼(稱為陳述式)必須以分號結尾,以便程式碼編譯器處理。

例如,一個簡單的變數可以這樣寫:

```csharp

public string FirstName = "Harrison";

```

或者也可以寫成:

```csharp

public

string

FirstName

=

"Harrison";

```

這兩種寫法對 Visual Studio 來說都是可接受的,但第二種寫法在軟體開發社群中是不被鼓勵的,因為這會使程式碼非常難以閱讀。


大括號的使用

第二個需要記住的格式規則是大括號(curly brackets)的使用: {}。方法、類別和介面在宣告後都需要一組大括號。

C# 的傳統做法是將每個括號放在新的一行,如下所示:

```csharp

public void MethodName()

{

}

```

不過你可能也會看到第一個大括號與宣告放在同一行:

```csharp

public void MethodName() {

}

```

程式碼除錯

Debug 方法

當我們需要將資訊和回饋輸出到 Unity 編輯器的 Console 視窗時,可以使用以下方法:

1. 對於簡單文字或單個變數,使用標準的 Debug.Log() 方法:

```csharp

Debug.Log("文字在這裡");

Debug.Log(CurrentAge);

```

2. 對於更複雜的除錯,使用 Debug.LogFormat():

```csharp

Debug.LogFormat("文字在這裡,添加 {0} 和 {1} 作為變數佔位符", CurrentAge, FirstName);

```

理解變數

變數宣告

變數宣告必須遵循以下要求:

- 必須指定變數將儲存的資料類型

- 變數必須有唯一名稱

- 如果有指派值,必須與指定的類型相符

- 變數宣告需要以分號結尾


基本語法為:

```csharp

dataType UniqueName = value;

```


類型和值的宣告

最常見的創建變數場景是在宣告時就有所有必要資訊。例如:

```csharp

int CurrentAge = 32;

```

僅類型宣告

有時你可能只知道變數的類型和名稱,但尚不知道其值:

```csharp

int CurrentAge;

```

存取修飾詞的使用

變數可以包含存取修飾詞(如 public),完整的語法為:

```csharp

accessModifier dataType UniqueName = value;

```


任何未標記為 public 的變數預設為 private,且不會在 Unity Inspector 面板中顯示。


存取修飾詞詳解

在 C# 中有四種主要的存取修飾詞,但作為初學者,你最常用到的是以下兩種:

1. **Public**: 任何腳本都可以無限制地訪問

2. **Private**: 只能在它們被創建的類別(稱為包含類別)中訪問。任何沒有存取修飾詞的變數預設都是 Private


另外兩種進階的修飾詞特性如下:

- **Protected**: 可從其包含類別或衍生自該類別的型別中訪問

- **Internal**: 只能在當前組件中使用(組件是自動生成的檔案,它將程式碼、資源等所有內容打包在一起)

讓我們實際試試看存取修飾詞! 就像現實生活中的資訊一樣,某些資料需要被保護或只與特定人分享。如果變數不需要在 Inspector 視窗中更改或被其他腳本訪問,它就適合使用 private 存取修飾詞。


更新 LearningCurve 的步驟:

1. 將 CurrentAge 前面的存取修飾詞從 public 改為 private 並儲存檔案

2. 回到 Unity,選擇 Main Camera,觀察 LearningCurve 部分的變化

由於 CurrentAge 現在是 private,它在 Inspector 視窗中不再可見,只能在 LearningCurve 腳本中通過程式碼訪問。點擊 Play 後,腳本仍會和之前一樣運作。


使用型別

在變數中指定特定型別是一個重要的選擇,它會影響變數整個生命週期中的每一個互動。由於 C# 是所謂的強型別(strongly typed)或型別安全(type-safe)語言,每個變數都必須有一個資料型別,沒有例外。相比之下,像 JavaScript 這樣的程式語言是非型別安全的。


常見的內建型別

C# 中的所有資料型別都源自(或稱為衍生自)一個共同的祖先: System.Object。這種層次結構稱為通用型別系統(Common Type System, CTS),意味著不同型別有許多共享的功能。以下是一些最常見的資料型別選項:

```csharp

public class LearningCurve : MonoBehaviour

{

private int CurrentAge = 30;

public int AddedAge = 1;

public float Pi = 3.14f;

public string FirstName = "Harrison";

public bool IsAuthor = true;


void Start()

{

ComputeAge();

Debug.Log($"A string can have variables like {FirstName} inserted directly!");

}


void ComputeAge()

{

Debug.Log(CurrentAge + AddedAge);

}

}

```


注意事項:

- 處理字串型別時,實際的文字值需要放在一對雙引號內

- float 值需要以小寫 f 結尾,如 Pi 的例子所示

- bool 變數在 Unity 中顯示為核取方塊(勾選表示 true,未勾選表示 false)

字串插值

數字型別的行為與你在學校學到的數學一樣,但字串有所不同。通過在開頭加上 $ 字元(稱為字串插值),可以直接在文字中插入變數和字面值。你已經在 LogFormat() 除錯中使用過插值字串,加上 $ 字元讓你可以在任何地方使用它們!

字串插值示例:

```csharp

Debug.Log($"A string can have variables like {FirstName} inserted directly!");

```


型別轉換

由於變數只能保存其宣告型別的值,但有時我們需要組合不同型別的變數。在程式設計術語中,這些稱為轉換,主要有兩種:

1. **隱式轉換**:自動進行,通常是當較小的值可以無需四捨五入就能放入另一個變數型別時:

```csharp

int MyInteger = 3;

float MyFloat = MyInteger; // 自動轉換為 3.0f


Debug.Log(MyInteger); // 顯示 3

Debug.Log(MyFloat); // 顯示 3

```

2. **顯式轉換**:當轉換過程中可能會丟失變數資訊時需要進行。例如,將 double 值轉換為 int 值時,需要通過在要轉換的值前加上目標型別的括號來明確轉換:

```csharp

int ExplicitConversion = (int)3.14; // 結果為 3

```

推斷宣告

C# 可以從指派的值推斷變數的型別。例如,var 關鍵字可以讓程式知道資料型別需要由其值來決定:

```csharp

var CurrentAge = 32; // 推斷為 int 型別

```

雖然這在某些情況下很方便,但不建議過度使用推斷變數宣告。這會讓你的程式碼增加許多猜測的成分,而程式碼應該要清晰明確。推斷變數宣告真正應該只在測試程式碼且不知道儲存的資料型別時使用。一旦知道了資料型別,建議將變數宣告改為特定型別以避免後續的執行時期錯誤。

    0會員
    4內容數
    留言0
    查看全部
    發表第一個留言支持創作者!
    uka的沙龍 的其他內容
    C#編程基礎筆記 1. 變量(Variables) - 變量是編程的最基本單位 - 技術上是計算機內存中存儲值的一小部分 - 實際上是一個容器,可以存儲不同類型的信息 - 變量必須有唯一的名稱 - 充當值的佔位符 示例: ```csharp public int Current
    Unity 2022 與 C# 程式設計:第一章完整詳細摘要
    C#編程基礎筆記 1. 變量(Variables) - 變量是編程的最基本單位 - 技術上是計算機內存中存儲值的一小部分 - 實際上是一個容器,可以存儲不同類型的信息 - 變量必須有唯一的名稱 - 充當值的佔位符 示例: ```csharp public int Current
    Unity 2022 與 C# 程式設計:第一章完整詳細摘要
    你可能也想看
    Google News 追蹤
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
    Thumbnail
    這篇內容,將會講解什麼是運算子,以及與運算子相關的知識。包括運算子的簡介、賦值運算子、算術運算子、遞增/遞減、比較運算子、邏輯運算子。
    Thumbnail
    這篇內容,將會講解什麼是資料型態,以及與資料型態相關的知識。包括資料型態的簡介、實數、布林值、 字串、陣列。
    Thumbnail
    這篇內容,將會講解什麼是變數,以及與變數相關的知識。包括變數、資料型態、變數賦值、變數的命名規則、變數的作用區域、變數的可重複性、內建變數。
    Thumbnail
    這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
    Thumbnail
    Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
    Thumbnail
    這篇內容,將會講解什麼是運算子,以及與運算子相關的知識。包括運算子的簡介、賦值運算子、算術運算子、遞增/遞減、比較運算子、邏輯運算子。
    Thumbnail
    這篇內容,將會講解什麼是資料型態,以及與資料型態相關的知識。包括資料型態的簡介、實數、布林值、 字串、陣列。
    Thumbnail
    這篇內容,將會講解什麼是變數,以及與變數相關的知識。包括變數、資料型態、變數賦值、變數的命名規則、變數的作用區域、變數的可重複性、內建變數。