Unity3D 中物体移动脚本小记

Uinty3D 中物体移动脚本小记

最近几天在Unity官网看了官方提供的教程,自己也实验了一下,发现几个不同的项目中,脚本中对物体移动的实现方式并不相同。

using UnityEngine;

public class PlayerMoveController : MonoBehaviour {

    public float speed = 5.0f;

    Rigidbody rb;

    void Start () {
        rb = GetComponent ();
    }

    void FixedUpdate () {
        float h = Input.GetAxis ("Horizontal");
        float v = Input.GetAxis ("Vertical");

        Vector3 movement = new Vector3 (h, 0.0f, v);

//      rb.velocity = movement * speed;
//      rb.AddForce (movement * speed);
//      rb.MovePosition (transform.position + movement * speed);
    }
}

以上可以算是比较精简的物体移动脚本了吧,而这里我要说的就是代码中被注释掉的三行

rb.velocity = movement * speed;
rb.AddForce (movement * speed);
rb.MovePosition (transform.position + movement * speed);

这三种方法都可以实现物体的移动,但是三者略有不同,所以记录一下


rb.velocity = movement * speed;

Rigidbody.velocity 是指物体在各个方向上的速度,比如所我想让物体往前移动,就给它附加一个向前的速度,但是这种移动方法,在与另一个面接触有摩擦时,会造成物体的翻滚或者无法移动

rb.AddForce (movement * speed);

Rigidbody.AddForce 是为物体施加一个方向的力,这个是在一个小球滚动的例子中实现的,因为是球体,所以只要在不同的方向施加力就可以自由的滚动,但是如果是立方体或是其它不规则形体,就会产生翻倒或者无法移动的情况

rb.MovePosition (transform.position + movement * speed);

Rigibody.MovePosition 单纯的将物体从起始位置移动一段距离,不是施加力,也不是赋予速度,只是单纯的移动,个人认为是适用范围最广的一种移动方式。

你可能感兴趣的:(电脑技术)