unity三大控制物體移動的元件
Transform元件:
Rigidbody元件:
CharacterController元件:角色控制器元件也屬於物理元件,在Physic物理屬性下,我查資料顯示角色控制器主要用於第三人稱和第一人稱遊戲主角(人形為主)的控制
使用SimpleMove控制角色移動,這裡附上程式碼方便自己記憶
public class Move : MonoBehaviour { private CharacterController cc;//定義角色控制器 void Start () { cc=gameObject.GetComponent<CharacterController>();//獲得物體上的角色控制器 } void Update () { float h = Input.GetAxis("Horizontal"); //使用自定義按鍵控制 float v = Input.GetAxis("Vertical"); cc.SimpleMove(new Vector3(h,0,v)); //控制角色移動 } }
使用這個發現就算將物體脫離地面執行時,它也會自動的掉落下來,雖然他身上並沒有剛體元件。所以角色控制器使用此指令碼會自動飲用重力。角色控制器不是剛體但是具備剛體的一些屬性。
但是使用Move這個指令碼,角色控制器卻沒有了重力。
public class Move : MonoBehaviour { private CharacterController cc; void Start () { cc=gameObject.GetComponent<CharacterController>(); } void Update () { float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); cc.Move(new Vector3(h,0,v)); } }
<1>Slope Limit 查閱相關資料
斜率限制,控制角色最大的爬坡斜度。我圖中設定的是45度,也就是說45度以上的斜坡角色控制器就爬不上去了
<2>Step Offset
臺階高度,控制角色可以邁上最大的臺階高度。圖中我設定的可爬臺階高度是2.83,超過就爬不上去了。但是這裡報錯了。說臺階高度必須小於等於高度+半徑*2;要不然會出錯。
<3>Skin Width [預設即可]
面板厚度,在角色的外圍包裹著一層“面板”,設定這層面板的厚度。
數值調大,最明顯的就是角色和地面之間的間距變大,也就是角色面板變厚了。
<4>Min Move Distance [預設即可]
最小移動距離,預設是 0.001,也就是 1 毫米。
如果該數值調大,因為我們在程式碼中用的是軸來控制移動,軸來控制移動的特點就是每一幀移動的距離非常小,所以調大角色達不到最小移動距離。角色控制器就不會移動。
<5>Center/Radius/Height角色控制器元件在 Scene 面板中體現為一個“膠囊碰撞器”的形狀。Center:控制中心點的位置;Radius:控制半徑;Height:控制高。其實在unity中我們正真控制的是碰撞器的移動旋轉。我們所看到的只是一個外衣我感覺是這樣的。
一個遊戲物體附加了角色控制器元件後,
和角色控制器元件共存的其他的碰撞器元件是處於“無效”狀態。
和場景中其他物體的互動碰撞,是以角色控制器元件的邊緣進行判斷的。
事件函式
1.OnControllerColliderHit(ControllerColliderHit hit)函式
可以通過 hit 獲取到角色碰撞器碰撞到的物體的資訊。
//使用角色碰撞器呼叫的觸發碰撞的事件
void OnControllerColliderHit(ControllerColliderHit col)
{
Debug.Log(col.transform.name); //列印輸出碰撞到的物體的名字
}
哈哈,這就是我學習角色控制器的一些體會,後面遇到問題在進行解決上傳記錄