2023-07-14|閱讀時間 ‧ 約 5 分鐘

Unity C# | CharacterController 概述

一、前言

  這篇文章將會講述角色控制器(CharacterController )的基本概述,並且分析其中可能的應用方式,最後簡單講述它的使用方式心得。

二、角色控制器(CharacterController)

  角色控制器是一個很常聽到的名詞,有許多人會好奇既然已經有物理系統與剛體組件,那為什麼要使用角色控制器。在這一次的專題製作中,我們使用的第三人稱控制包,它就是使用角色控制器。

1. 無剛體(Rigidbody)

  它最主要的特色就是為了不使用  Rigidbody 也可以控制玩家的移動,它在使用方式上很貼近初學者直接在每一個影格控制物件座標,不過直接控制座標會有不同程式腳本彼此衝突的問題。

  不使用剛體系統有好處也有壞處,其中之一就是不能使用剛體系統常見的給予推力或調整速度這種容易理解的作法,但也因此不會模擬物理,在移動的過程中一定都是自己程式碼撰寫的內容。

2. 自帶地面判斷與膠囊碰撞體

  它跟物理系統比較不一樣的地方在於,它自己就攜帶了地面判斷,因為本質上來說它就是為了角色控制而產生的機制,而物理系統則不一定。

  它自己攜帶了膠囊碰撞體,角色控制器有不少參數就是在設定這個膠囊碰撞體,包含中心、高度、半徑等內容都是在控制它。

3. 只有唯一移動控制

  因為角色控制器的誕生標榜著容易控制與使用的角色控制方式,因此它全身上下只有一個控制移動的方式。前面有談到它的移動方式近似於初學者隨著影格控制座標的方式,而這就是它的移動方式。

  我在使用的時候有感受到,使用角色控制器應該不會出現程式腳本彼此互相衝突的問題,因為都是使用角色控制器進行移動,因此它應該可以讓每一個移動參數合在一起運作,避免衝突。

三、應用方向

  角色控制器有很明確的新手導向與應用方向,這邊簡單介紹我自己分析的幾項角色控制器的應用方向。

1. 不用複雜物理系統的遊戲

  首先最基本的結論,就是如果遊戲不使用物理系統,那就很適合使用角色控制器來運行。如果不希望角色在移動的過程中,遇到超乎想像的衝擊或奇怪的移動力道,那就使用角色控制器吧!

2. 需要自訂很多奇幻移動的遊戲

  在大多數的奇幻遊戲中,角色通常會使用很多匪夷所思的移動,例如超級無敵長的跳躍時間、滯留在空中、穿梭在敵人之間等,那角色控制器很適合這種遊戲的製作,因為這些控制非常不物理。

  除了避免在連招的過程中遇到奇特的外力,把所有的玩家控制都掌握在可操控的範圍內,角色控制器可以保證自己寫的都是沒問題的項目。

3. 非現實的遊戲

  因為遊戲沒有任何物理系統,自然而然就沒有重力系統,所有非現實的遊戲都有一個很重要的共通點,它們的重力通常變來變去的,無論是遊戲世界在不同維度改變、空間、時間,重力改變都是在實作上的重要手段。

  在非現實的遊戲裡面,這種控制最好玩全交給程式員掌控,而不能使用任何內建的系統,因此角色控制是最適合的工具,否則玩家可能會突然看到自己明明已經在太空了,卻在某一刻被重力影響。

四、使用方式

  非常簡單的使用方式。

1. 移動

CharacterController.Move

public CollisionFlags Move(Vector3 motion);

  它的移動方式非常簡單,就是一個三維座標,有趣的事情在於移動的距離好像是一個小數就能移動很多,我有在網路上找到教學,似乎直接把玩家輸入綁進去角色控制器就能模擬移動了,非常方便。

2. 簡易移動

CharacterController.SimpleMove

public bool SimpleMove(Vector3 speed);

  它的移動方式還包含了重力,並且不用特別撰寫 Time.deltatime,直接寫上想要的速度就可以了,官方在文檔中有寫每一幀只有簡單移動或移動就可以了。 

五、後記

  這篇文章就分享到這邊,角色控制器是真的簡單很多,但是我還是比較喜歡剛體的運動,如果未來我把數學運算與旋轉方向使用精熟了,可能我也會喜歡上角色控制器吧。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.