接下来就是该如何控制player的问题了。以前用过很多的直接用character controller或者是simple move();等等,今天在用一种新的。用rigidbody.MovePosition();

在这之前先用个最简单的transform.Translate();这个方法也是最容易的。但是他的原理是,把物体的position直接改变了,这样就不会跟任何物体发生碰撞,所以这样是不行的 。

然而用rigidbody.MovePosition();必然是用rigidbody。注意设置constraints的属性,我们的不向Y轴移动,所以锁定Y;同样的不会在X,Z旋转如下图设置:

还要注意rigidbody要和collider配合使用。。。。所以必须要有collider。。。这里我们用capsule  collider......。。。。

噩梦系列篇之Player的运动控制_ide

分析代码:

因为只是控制player 的X和Z两个轴的方向的运动。所以就设置 float h = Input.GetAxis("Horizontal");   float v = Input.GetAxis("Vertical");表示获取的是X,Z两个轴。。。

那么这里Update()运行会发生卡顿,所以改成运行有规律的FixedUpdate();这样把代码绑定到player上就可以控制player的移动了
     

using UnityEngine;
using System.Collections;
public class palyermve : MonoBehaviour
{
public float speed = 3f;

private float h;

private float v;
// Rigidbody rigidbody; //unity5.0版本需要声明否则错误

void Start()
{
// rigidbody = this.GetComponent<Rigidbody>();//unity5.0版本需要
}

void FixedUpdate()
{
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
//transform.Translate(new Vector3(h,0,v)*speed*Time.deltaTime);//可以用,但是无碰撞。。。。

rigidbody.MovePosition(transform.position + new Vector3(h, 0, v) * speed * Time.deltaTime);//当前位置加上移动的距离就是最终的位置
}



}