当前位置: 代码迷 >> .NET相关 >> unity学习-003:角色控制器(中)
  详细解决方案

unity学习-003:角色控制器(中)

热度:297   发布时间:2016-04-24 02:58:22.0
unity学习--003:角色控制器(中)

  在上篇 unity学习--003:角色控制器(上)中,看了点角色控制的基本实现方法,鼠标和键盘控制比较粗糙的实现。

  在这篇中,主要介绍几个unity封装的角色控制方法,

  然后预计在下篇中综合介绍几种主流的角色控制方法。

  话不多说,开搞:

  依旧是上次拖过来的几个模型

  

   不过,这次添加了地形,素材,和天空盒,自然光,至于怎么加的,请看这里  添加地形等

   不在黑黑的,心情也好点了,下面来介绍几种unity自带的角色控制操作。(这些方法都是unity自带的API)

  1、CharacterController.move()方法

     使用这个方法前需要向角色添加CharacterController组件

      

然后像角色中添加代码脚本

//速度    public float speed = 6.0F;    //跳高速度    public float jumpSpeed = 8.0F;    //重力    public float gravity = 20.0F;    //移动目标    private Vector3 moveDirection = Vector3.zero;    void Update()    {        //获取角色控制器        CharacterController controller = GetComponent<CharacterController>();        //判断是否着地        if (controller.isGrounded)        {            //设置移动向量            moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));            //改变角色朝向            moveDirection = transform.TransformDirection(moveDirection);            moveDirection *= speed;            //设置跳跃            if (Input.GetButton("Jump"))                moveDirection.y = jumpSpeed;        }        moveDirection.y -= gravity * Time.deltaTime;        //移动        controller.Move(moveDirection * Time.deltaTime);    }

   这里是改变角色的方向后再改变他的位置,显然这里的移动方向不受角色朝向的影响,是绝对位置,世界坐标系,

  2、CharacterController.simple()方法

public float speed = 3.0F;    public float rotateSpeed = 3.0F;    void Update()    {        CharacterController controller = GetComponent<CharacterController>();        //角色转向        transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0);        Vector3 forward = transform.TransformDirection(Vector3.forward);        float curSpeed = speed * Input.GetAxis("Vertical");        //简单移动        controller.SimpleMove(forward * curSpeed);    }

 这里是简单移动,和上一方法不同的是,他是自身坐标系,方向随着角色方向变化,

还有这里不好实现跳跃,

  3、rigidbody.MovePosition()

 

private Vector3 speed =Vector3.zero;	void FixedUpdate() {        speed = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));		rigidbody.MovePosition(rigidbody.position + speed *3* Time.deltaTime);	}

   通过刚体实现角色的移动,刚体和角色控制器有所不同,角色控制器包含刚体的一部分属性,并且不受力的影响

  这节会不断更新遇到的角色控制方法,在介绍完Camera后会尝试实现几种主流的操作方法

  相关解决方案