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); //打印输出碰撞到的物体的名字
    } 

哈哈,这就是我学习角色控制器的一些体会,后面遇到问题在进行解决上传记录 大笑

猜你喜欢

转载自blog.csdn.net/GZasplin/article/details/80673126