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

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

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

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

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


分析代码:

因为只是控制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);//当前位置加上移动的距离就是最终的位置 
    }


    
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值