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 型別

```

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

留言
avatar-img
留言分享你的想法!
avatar-img
uka的沙龍
0會員
6內容數
uka的沙龍的其他內容
2025/01/12
筆記:角色移動、相機控制與碰撞 1. 角色移動的基礎 移動方式選擇: Transform 組件:簡單易用,直接改變物件的位置與旋轉。 Rigidbody 物理效果:通過施加力實現真實移動,但需配置物理屬性。 現成組件或 Prefab:如 Unity 的 Character Control
2025/01/12
筆記:角色移動、相機控制與碰撞 1. 角色移動的基礎 移動方式選擇: Transform 組件:簡單易用,直接改變物件的位置與旋轉。 Rigidbody 物理效果:通過施加力實現真實移動,但需配置物理屬性。 現成組件或 Prefab:如 Unity 的 Character Control
2025/01/12
第五章 筆記:使用類別、結構和物件導向程式設計(OOP) 目標與重要性 類別與物件導向程式設計(OOP):學習創建自定義類別,了解變數、建構子、方法,以及類別與結構之間的差異。 OOP 原則: 封裝(Encapsulation):限制對物件變數和方法的訪問權限。 繼承(Inherita
2025/01/12
第五章 筆記:使用類別、結構和物件導向程式設計(OOP) 目標與重要性 類別與物件導向程式設計(OOP):學習創建自定義類別,了解變數、建構子、方法,以及類別與結構之間的差異。 OOP 原則: 封裝(Encapsulation):限制對物件變數和方法的訪問權限。 繼承(Inherita
2024/11/05
## 存取修飾詞詳解 在 C# 中有四種主要的存取修飾詞,但作為初學者,你最常用到的是以下兩種: 1. **Public**: 任何腳本都可以無限制地訪問 2. **Private**: 只能在它們被創建的類別(稱為包含類別)中訪問。任何沒有存取修飾詞的變數預設都是 Private
2024/11/05
## 存取修飾詞詳解 在 C# 中有四種主要的存取修飾詞,但作為初學者,你最常用到的是以下兩種: 1. **Public**: 任何腳本都可以無限制地訪問 2. **Private**: 只能在它們被創建的類別(稱為包含類別)中訪問。任何沒有存取修飾詞的變數預設都是 Private
看更多
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
這篇內容,將會講解什麼是運算子,以及與運算子相關的知識。包括運算子的簡介、賦值運算子、算術運算子、遞增/遞減、比較運算子、邏輯運算子。
Thumbnail
這篇內容,將會講解什麼是運算子,以及與運算子相關的知識。包括運算子的簡介、賦值運算子、算術運算子、遞增/遞減、比較運算子、邏輯運算子。
Thumbnail
這篇內容,將會講解什麼是資料型態,以及與資料型態相關的知識。包括資料型態的簡介、實數、布林值、 字串、陣列。
Thumbnail
這篇內容,將會講解什麼是資料型態,以及與資料型態相關的知識。包括資料型態的簡介、實數、布林值、 字串、陣列。
Thumbnail
這篇內容,將會講解什麼是變數,以及與變數相關的知識。包括變數、資料型態、變數賦值、變數的命名規則、變數的作用區域、變數的可重複性、內建變數。
Thumbnail
這篇內容,將會講解什麼是變數,以及與變數相關的知識。包括變數、資料型態、變數賦值、變數的命名規則、變數的作用區域、變數的可重複性、內建變數。
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元一次方程式
Thumbnail
中學數學基礎練習—一元二次方程式
Thumbnail
中學數學基礎練習—一元二次方程式
Thumbnail
中學數學基礎練習—一元二次方程式
Thumbnail
中學數學基礎練習—一元二次方程式
Thumbnail
中學數學基礎練習—一元二次方程式
Thumbnail
中學數學基礎練習—一元二次方程式
Thumbnail
中學數學基礎練習—一元二次方程式
Thumbnail
中學數學基礎練習—一元二次方程式
Thumbnail
高中數學主題練習—對數方程式
Thumbnail
高中數學主題練習—對數方程式
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News