Unity3D 中物体移动脚本小记

    xiaoxiao2021-03-26  13

    Uinty3D 中物体移动脚本小记

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

    using UnityEngine; public class PlayerMoveController : MonoBehaviour { public float speed = 5.0f; Rigidbody rb; void Start () { rb = GetComponent<Rigidbody> (); } 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 单纯的将物体从起始位置移动一段距离,不是施加力,也不是赋予速度,只是单纯的移动,个人认为是适用范围最广的一种移动方式。

    转载请注明原文地址: https://ju.6miu.com/read-650108.html

    最新回复(0)