标签:
在上篇 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后会尝试实现几种主流的操作方法
标签:
原文地址:http://www.cnblogs.com/ben1992/p/4216953.html