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

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

筆記:角色移動、相機控制與碰撞

1. 角色移動的基礎

  • 移動方式選擇
    1. Transform 組件:簡單易用,直接改變物件的位置與旋轉。
    2. Rigidbody 物理效果:通過施加力實現真實移動,但需配置物理屬性。
    3. 現成組件或 Prefab:如 Unity 的 Character Controller,快速實現移動控制。
  • 基本設置
    1. 在場景中創建一個膠囊物件作為玩家角色。
    2. 為膠囊添加 Rigidbody 組件並設置其約束(限制旋轉)。
    3. 使用 Material 為角色設置顏色。

2. 使用 Transform 控制角色移動

  • 向量基礎
    • Unity 使用 Vector3 表示 3D 空間中的位置和方向。
    • Vector3.forward 表示物件的正向方向。
  • 玩家輸入
    • 通過 Input.GetAxis("Horizontal") 和 Input.GetAxis("Vertical") 捕捉玩家輸入。
    • 水平軸 (A/D 或 ←/→) 控制旋轉,垂直軸 (W/S 或 ↑/↓) 控制前進和後退。
  • 程式碼實現
    public float MoveSpeed = 10f;
    public float RotateSpeed = 75f;

    void Update() {
    float vInput = Input.GetAxis("Vertical") * MoveSpeed;
    float hInput = Input.GetAxis("Horizontal") * RotateSpeed;

    transform.Translate(Vector3.forward * vInput * Time.deltaTime);
    transform.Rotate(Vector3.up * hInput * Time.deltaTime);
    }

3. 相機控制

  • 相機跟隨
    • 設置相機與玩家的相對位置(偏移)。
    • 使用 TransformPoint 方法動態更新相機位置。
  • 程式碼實現
    public Vector3 CamOffset = new Vector3(0f, 1.2f, -2.6f);
    private Transform _target;

    void Start() {
    _target = GameObject.Find("Player").transform;
    }

    void LateUpdate() {
    transform.position = _target.TransformPoint(CamOffset);
    transform.LookAt(_target);
    }

4. 使用 Rigidbody 改進移動

  • Rigidbody 動態物理運算
    • 避免直接修改 Transform,通過 MovePosition 和 MoveRotation 實現平滑移動和旋轉。
  • 程式碼更新
    private Rigidbody _rb;

    void Start() {
    _rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate() {
    Vector3 rotation = Vector3.up * hInput;
    Quaternion angleRot = Quaternion.Euler(rotation * Time.fixedDeltaTime);
    _rb.MovePosition(transform.position + transform.forward * vInput * Time.fixedDeltaTime);
    _rb.MoveRotation(_rb.rotation * angleRot);
    }

5. 碰撞與觸發器

  • 碰撞
    • Collider 組件允許物件檢測相互碰撞。
    • 事件處理: OnCollisionEnter:檢測物件碰撞。 OnTriggerEnter:檢測物件進入觸發區域。
  • 觸發器
    • 啟用 isTrigger,物件可以穿過 Collider,觸發相關事件。
    • 應用於敵人偵測玩家範圍。

6. 練習與總結

  • 實作練習
    1. 創建健康補給物件,實現玩家碰撞後拾取的邏輯。
    2. 為敵人添加觸發區域,實現進入或離開觸發區時的日誌輸出。
  • 核心概念
    1. Rigidbody 添加真實物理效果。
    2. Collider 管理物件間的互動與觸發。
    3. Prefab 提高設計效率,支持多場景重用。


avatar-img
0會員
6內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
uka的沙龍 的其他內容
第五章 筆記:使用類別、結構和物件導向程式設計(OOP) 目標與重要性 類別與物件導向程式設計(OOP):學習創建自定義類別,了解變數、建構子、方法,以及類別與結構之間的差異。 OOP 原則: 封裝(Encapsulation):限制對物件變數和方法的訪問權限。 繼承(Inherita
## 存取修飾詞詳解 在 C# 中有四種主要的存取修飾詞,但作為初學者,你最常用到的是以下兩種: 1. **Public**: 任何腳本都可以無限制地訪問 2. **Private**: 只能在它們被創建的類別(稱為包含類別)中訪問。任何沒有存取修飾詞的變數預設都是 Private
深入探討變數、型別和方法 正確撰寫 C# 程式碼 基本語法規則 程式碼行就像句子一樣,需要有某種分隔或結束字符。每一行 C# 程式碼(稱為陳述式)必須以分號結尾,以便程式碼編譯器處理。 例如,一個簡單的變數可以這樣寫: ```csharp public string FirstNam
C#編程基礎筆記 1. 變量(Variables) - 變量是編程的最基本單位 - 技術上是計算機內存中存儲值的一小部分 - 實際上是一個容器,可以存儲不同類型的信息 - 變量必須有唯一的名稱 - 充當值的佔位符 示例: ```csharp public int Current
Unity 2022 與 C# 程式設計:第一章完整詳細摘要
第五章 筆記:使用類別、結構和物件導向程式設計(OOP) 目標與重要性 類別與物件導向程式設計(OOP):學習創建自定義類別,了解變數、建構子、方法,以及類別與結構之間的差異。 OOP 原則: 封裝(Encapsulation):限制對物件變數和方法的訪問權限。 繼承(Inherita
## 存取修飾詞詳解 在 C# 中有四種主要的存取修飾詞,但作為初學者,你最常用到的是以下兩種: 1. **Public**: 任何腳本都可以無限制地訪問 2. **Private**: 只能在它們被創建的類別(稱為包含類別)中訪問。任何沒有存取修飾詞的變數預設都是 Private
深入探討變數、型別和方法 正確撰寫 C# 程式碼 基本語法規則 程式碼行就像句子一樣,需要有某種分隔或結束字符。每一行 C# 程式碼(稱為陳述式)必須以分號結尾,以便程式碼編譯器處理。 例如,一個簡單的變數可以這樣寫: ```csharp public string FirstNam
C#編程基礎筆記 1. 變量(Variables) - 變量是編程的最基本單位 - 技術上是計算機內存中存儲值的一小部分 - 實際上是一個容器,可以存儲不同類型的信息 - 變量必須有唯一的名稱 - 充當值的佔位符 示例: ```csharp public int Current
Unity 2022 與 C# 程式設計:第一章完整詳細摘要
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇內容,將會講解什麼是「switch」,以及與「switch」相關的知識。包括switch的簡介、switch、break。
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
Thumbnail
這篇內容,將簡單介紹Asset Browser、Workspace、Inspector、Code Browser,作為入門的介面導覽。
Thumbnail
這篇內容,將教你如何開啟新的GameMaker專案,並調整畫面佈局。也會講解,為何建議用英文語系,來進行遊戲開發。
Thumbnail
本章節的目的是讓讀者瞭解C#的物件導向特性,包括類別、繼承、多型、封裝等基本概念,以及介面、抽象類別、靜態類別等進階主題。此外,本章節也將介紹如何使用列舉、委派、Lambda表達式、泛型及反射,這些都是C#中常見的強大功能。
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇內容,將會講解什麼是「switch」,以及與「switch」相關的知識。包括switch的簡介、switch、break。
Thumbnail
這篇內容,將會講解什麼是表達式(Expression),什麼是陳述式(Statement)。有了這些概念,各位會更容易理解,要如何設計程式碼。
Thumbnail
這篇內容,將會講解什麼是函式,以及與函式相關的知識。包括函式的簡介、Runtime Function、自訂函式、Script Function 腳本函式、Method 方法。
Thumbnail
這篇內容,將會用一個簡單的範例,來解釋物件(Object)和實體(Instance)的差別。包括Instance的簡介、ID、物件改變會影響實體。
Thumbnail
這篇內容,將簡單介紹Asset Browser、Workspace、Inspector、Code Browser,作為入門的介面導覽。
Thumbnail
這篇內容,將教你如何開啟新的GameMaker專案,並調整畫面佈局。也會講解,為何建議用英文語系,來進行遊戲開發。
Thumbnail
本章節的目的是讓讀者瞭解C#的物件導向特性,包括類別、繼承、多型、封裝等基本概念,以及介面、抽象類別、靜態類別等進階主題。此外,本章節也將介紹如何使用列舉、委派、Lambda表達式、泛型及反射,這些都是C#中常見的強大功能。
Thumbnail
完成了Debug.log()的測試,接著還是要跟各位簡單講一下C#的一些規則,之後看程式會(比較)看得懂。 又講到變數? 在Unity中,變數是重要的工具,用來儲存和管理資料。讓開發者能夠靈活調整遊戲的行為和性能,減少代碼的重複性,使得遊戲開發更加高效和簡潔。透過使用變數,開發者可以輕鬆修改資料