1. 程式人生 > >unity三大控制物體移動的元件

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); //列印輸出碰撞到的物體的名字
    } 

哈哈,這就是我學習角色控制器的一些體會,後面遇到問題在進行解決上傳記錄 大笑