码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-01-21 08:58:32      阅读:352      评论:0      收藏:0      [点我收藏+]

标签:

  在上篇 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后会尝试实现几种主流的操作方法

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

标签:

原文地址:http://www.cnblogs.com/ben1992/p/4216953.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!