2012年12月24日 星期一

Unity - Character Controller Vol.1 : 基本介紹

       最近開始製作的新專案是屬於冒險遊戲,開始嘗試了使用Unity的Character Controller,不過有關於Character Controller的基礎設置並沒有很多的參考資料,而在Unity官方的Scripting Reference裡雖然有使用方式,但是資料太雜反而不知道要如何運用。所以在一開始使用的時候花了點時間在研究Character Controller的基本設置。以下為一些Character Controller目前已知的概念介紹。



甚麼是" Character Controller " ?

       顧名思義也就是Unity所提供的角色控制器,使用者可以在這裡設定角色Collider的位置、大小、重量或者最大接受傾斜度。Character Controller同樣受惠於Physics底下的gravity。

為甚麼要用Character Controller?

       以往在製作遊戲的時候我們通常都會直接使用Rigidbody,但是往往卻很難以控制完全的物理系統所造成的影響,比方說角色受到撞擊後的位置偏移。即使是將物件的position和rotation資訊都freeze起來也無法完全避免碰撞所造成的位移。
Character Controller能夠提供確保角色在絕對位置上不受碰撞而造成位移,而使用者也可以單純修改gravity的數值來進行控制,比方說跳躍。

如何判定isGrounded?

       在Charactercontroller的類別裡有一些可以使用的方法,其中用來判斷角色是否在地面上就是使用isGrounded。由套用角色控制器的角色身上的collisionFlagsCollisionFlags類中的Below做AND,若結果為True則表示目前角色在地面上,反之則否。但是一般只需要直接呼叫isGrounded這個方法就好。

那麼目前用到的成員?

       目前可以做到基本控制的Charactercontroller成員有SimpleMove以及Move。使用SimpleMove的好處是可以確保isGrounded永遠為true,也受惠於物理重力但卻無法改變重力,意思就是說如果使用者要製作跳躍動作,使用SimpleMove是行不通的,而且目前仍然不知道我們可以對SimpleMove做那些控制。
       使用Move的好處是可以去對重力進行控制,玩家任何關係到自由落體運動的行為都可以直接交由Charactercontroller去做計算,但是isGrounded的回傳值會偶而為false,此問題目前尚待解決。

沒有留言:

張貼留言