Learning C# by Developing Games with Unity 第五、六章筆記整理

更新於 發佈於 閱讀時間約 7 分鐘

第五章

筆記:使用類別、結構和物件導向程式設計(OOP)

目標與重要性

  • 類別與物件導向程式設計(OOP):學習創建自定義類別,了解變數、建構子、方法,以及類別與結構之間的差異。
  • OOP 原則
    1. 封裝(Encapsulation):限制對物件變數和方法的訪問權限。
    2. 繼承(Inheritance):子類別繼承父類別屬性和方法。
    3. 多型(Polymorphism):允許子類別覆寫父類別方法。

1. 類別的基本定義與使用

  • 類別是參考型別(Reference Type),可作為藍圖來創建物件。
  • 定義類別
    public class ClassName {
    // 變數
    // 建構子
    // 方法
    }
  • 實例化類別
    ClassName instance = new ClassName();

2. 類別成員

  • 變數(欄位):存儲類別屬性資訊,可設置初始值。
  • 建構子
    public ClassName(string name) {
    this.name = name;
    }
    • 預設建構子:由 C# 自動生成,將變數設置為型別預設值。
    • 自定義建構子:接受參數,用於初始化物件。
  • 方法(功能):執行操作或行為,通常通過物件調用。

3. 結構的基本定義與使用

  • 結構是值型別(Value Type),用於存儲簡單且不頻繁變化的數據。
  • 定義結構
    public struct StructName {
    public string name;
    public int value;

    public StructName(string name, int value) {
    this.name = name;
    this.value = value;
    }
    }
  • 實例化結構
    StructName instance = new StructName("Name", 100);

4. 物件導向設計的核心

  • 封裝(Encapsulation)
    • 設置變數或方法為 private,只能在類別內訪問。
    • 通過 public 方法來控制外部訪問。
  • 繼承(Inheritance)
    public class ChildClass : ParentClass { }
    • 子類別繼承父類別的所有 public 和 protected 成員。
    • 可使用 base 關鍵字調用父類別的建構子。
  • 多型(Polymorphism)
    public virtual void Method() { }
    public override void Method() { }
    • 父類方法可使用 virtual 關鍵字標記,允許子類使用 override 修改行為。

5. 類別與 Unity 的結合

  • 組件(Component)與物件(GameObject)
    Transform transform = gameObject.GetComponent<Transform>();
    • Unity 中的物件由多個組件組成,每個組件是類別的實例。
    • 使用 GetComponent<T>() 獲取組件實例。
  • 尋找與設置組件
    • 使用 GameObject.Find() 獲取場景中的物件。
    • 或者拖放物件到檢查器中進行賦值。

6. 總結

  • 掌握類別和結構的基礎知識及其在 Unity 中的應用。
  • 學會通過 OOP 原則設計模組化、可重用的程式。
  • 下一步:將這些技術應用到 Unity 遊戲場景中,設計互動行為。

第六章

筆記:Unity 遊戲開發基礎

1. 遊戲設計基礎

  • 遊戲設計的重要元素
    1. 概念:確定遊戲的核心想法和類型。
    2. 核心機制:角色在遊戲中的可執行互動(如跳躍、射擊、解謎等)。
    3. 控制方案:玩家操控角色的按鍵或輸入方式。
    4. 故事:提供情感連結的遊戲敘事背景。
    5. 藝術風格:整體視覺風格。
    6. 勝敗條件:規定如何達成勝利或失敗。
  • 設計文件
    • 遊戲設計文檔(GDD):描述遊戲的玩法、氣氛和故事。
    • 技術設計文檔(TDD):記錄硬體需求與程式結構。
    • 單頁文檔:簡潔呈現遊戲核心概念,適用於宣傳。

2. 建構遊戲場景

  • 環境設計流程
    1. 創建場景基礎:使用平面物件(如地板)作為基礎。
    2. 物件調整:透過縮放(Scale)、旋轉(Rotation)、定位(Position)設置物件位置和大小。
    3. 材質(Materials): 創建材質並應用到物件上,調整顏色或貼圖。
    4. 白模設計(White-boxing): 使用基本幾何圖形構建場景初稿,後續可替換為更精緻模型。
  • 清理階層結構
    • 將相關物件分組到父物件下,保持層級結構整潔。
    • 父物件的原點(Local Space)影響子物件的位置和旋轉參照。

3. Prefabs 的使用

  • Prefab 定義
    • 預製件是可重用的物件模板,保存其所有子物件、組件與屬性。
    • 編輯 Prefab 可影響場景中的所有實例。
  • 實踐
    • 創建防禦塔(Barrier)Prefab,並添加到場景的每個角落。
    • 更新 Prefab 並應用更改,使所有實例同步更新。

4. 動畫與燈光

  • 燈光(Lighting)
    • 實時燈光:即時計算,適用於動態場景,但耗費資源。
    • 預計算燈光:靜態光源,提升效能但缺乏動態反應。
    • 主要燈光類型: 方向光(Directional Light):模擬太陽光。 點光源(Point Light):從中心向外擴散。 聚光燈(Spotlight):聚焦特定區域。 面光源(Area Light):矩形區域發光。
  • 動畫
    • 程式控制動畫: 通過 Transform.Rotate 方法執行物件旋轉。 使用 Time.deltaTime 確保動畫在不同設備上保持平滑。
    • Unity 動畫系統: 動畫視窗(Animation):創建動畫片段並設定關鍵幀。 動畫控制器(Animator):管理動畫片段和過渡。
留言
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
2024/11/05
## 存取修飾詞詳解 在 C# 中有四種主要的存取修飾詞,但作為初學者,你最常用到的是以下兩種: 1. **Public**: 任何腳本都可以無限制地訪問 2. **Private**: 只能在它們被創建的類別(稱為包含類別)中訪問。任何沒有存取修飾詞的變數預設都是 Private
2024/11/05
## 存取修飾詞詳解 在 C# 中有四種主要的存取修飾詞,但作為初學者,你最常用到的是以下兩種: 1. **Public**: 任何腳本都可以無限制地訪問 2. **Private**: 只能在它們被創建的類別(稱為包含類別)中訪問。任何沒有存取修飾詞的變數預設都是 Private
2024/10/22
深入探討變數、型別和方法 正確撰寫 C# 程式碼 基本語法規則 程式碼行就像句子一樣,需要有某種分隔或結束字符。每一行 C# 程式碼(稱為陳述式)必須以分號結尾,以便程式碼編譯器處理。 例如,一個簡單的變數可以這樣寫: ```csharp public string FirstNam
2024/10/22
深入探討變數、型別和方法 正確撰寫 C# 程式碼 基本語法規則 程式碼行就像句子一樣,需要有某種分隔或結束字符。每一行 C# 程式碼(稱為陳述式)必須以分號結尾,以便程式碼編譯器處理。 例如,一個簡單的變數可以這樣寫: ```csharp public string FirstNam
看更多
你可能也想看
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
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
Thumbnail
※ OPP第一大核心-封裝 封裝的精神在於將「方法」、「屬性」和「邏輯」包裝在類別裡面,透過類別的實例來實現。這樣外部物件不需要了解內部的實現細節,只需要知道如何使用該類別提供的接口即可。換句話說,封裝是將內部細節隱藏起來,只暴露必要的部分給使用者。 封裝的核心概念是,使用者如果想要接觸資料,只
Thumbnail
本章節的目的是讓讀者瞭解C#的物件導向特性,包括類別、繼承、多型、封裝等基本概念,以及介面、抽象類別、靜態類別等進階主題。此外,本章節也將介紹如何使用列舉、委派、Lambda表達式、泛型及反射,這些都是C#中常見的強大功能。
Thumbnail
本章節的目的是讓讀者瞭解C#的物件導向特性,包括類別、繼承、多型、封裝等基本概念,以及介面、抽象類別、靜態類別等進階主題。此外,本章節也將介紹如何使用列舉、委派、Lambda表達式、泛型及反射,這些都是C#中常見的強大功能。
Thumbnail
在網路上查找可以發現有很多類別圖的 6 種關係的說明與示例,通常不太容易難取得共鳴。主要有兩個原因: 1. 對於這些關係線的定義混淆,導致無法判斷滿足條件與使用時機 2. 缺少生活相關的具體案例,很難理解這些關係所對應的抽象概念
Thumbnail
在網路上查找可以發現有很多類別圖的 6 種關係的說明與示例,通常不太容易難取得共鳴。主要有兩個原因: 1. 對於這些關係線的定義混淆,導致無法判斷滿足條件與使用時機 2. 缺少生活相關的具體案例,很難理解這些關係所對應的抽象概念
Thumbnail
這篇文章將會講述 Unity 自帶參數的功能,在撰寫時要怎麼進行封裝。
Thumbnail
這篇文章將會講述 Unity 自帶參數的功能,在撰寫時要怎麼進行封裝。
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 類別Class 創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同
Thumbnail
前言 這是紀錄本人學習Unity C#時的筆記,希望讓自己能夠整理思緒,方便記憶。 因為是新手自學的關係,也很有可能有誤解或錯誤的地方,請見諒… 類別Class 創造類別之後就可以持續使用創建的類別來創建物件,以武器為例,在遊戲裡有不同的武器,但是他們的屬性是一樣的,我們就可以在一個類別裡面設定不同
Thumbnail
一、C#介紹 二、為什麼要學C# 三、.NET Framework介紹
Thumbnail
一、C#介紹 二、為什麼要學C# 三、.NET Framework介紹
Thumbnail
這篇文章將會講述使用 C# 的類( Class ) 來讓欄位模組(module)化。
Thumbnail
這篇文章將會講述使用 C# 的類( Class ) 來讓欄位模組(module)化。
Thumbnail
本文章將會介紹結構(Struct)的定義、簡單介紹其應用,並且補充與序列化(SerializeFile)結合的方式。
Thumbnail
本文章將會介紹結構(Struct)的定義、簡單介紹其應用,並且補充與序列化(SerializeFile)結合的方式。
Thumbnail
本文以實際的程式碼來說明Value Type和Reference Type的差異,並介紹實用的除錯工具。
Thumbnail
本文以實際的程式碼來說明Value Type和Reference Type的差異,並介紹實用的除錯工具。
Thumbnail
使用者自訂的資料型別
Thumbnail
使用者自訂的資料型別
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News