关于Unity3d 使用rigidbody.velocity代替Transform.Translate()来使物体向前移动

来源:互联网 发布:车削中心的编程视频 编辑:程序博客网 时间:2024/06/05 18:26

个人接触Unity3d已经一年多的时间了,这是第一次有勇气在网上发表自己的心得,如有不敬或不合理的地方多多包含。

以下是自己的一个发现,如有不合理的地方请·大家多多指出:

在Unity里物体的移动有Transform.Translate()和rigidbody.velocity这两个方法(当然可能还有其他),Transform.Translate()是坐标的改变,rigidbody.velocity是在一定的方向(这里的方向是指世界坐标的方向)上以一定速度移动,对于方向的变化相对于rigidbody.velocity来说比较灵活,但因为是坐标的变化,有时候会是物体自身的物理效果不起作用,而rigidbody.velocity移动的方向真是针对世界坐标的方向而言,那么如何用rigidbody.velocity代替Transform.Translate()来使物体向前移动呢?

我是怎么想的,坐标也可以用向量来表示,rigidbody.velocity的方向也可以用向量表示,那么首先必须要能够获取物体自身指向前方的向量。

假设有三个点,分别为原点,物体自身坐标点LocalPos,始终在物体前方一定距离的点LocalForward。那么物体向前移动的方向就可以用LocalForward - LocalPos来表示。

废话不多说,代码如下:

using UnityEngine;
using System.Collections;


public class RigidSpeedVec : MonoBehaviour {


public float speed = 2;/*速度*/


// Use this for initialization
void Start () {


this.gameObject.AddComponent<Rigidbody>();/*添加Rigidbody组件*/


rigidbody.useGravity = false;
}


// Update is called once per frame
void Update () {

}
void FixedUpdate() {


Vector3 LocalPos = transform.position;/*物体所处的世界坐标向量*/


Vector3 LocalForward = transform.TransformPoint(Vector3.forward * speed);/*物体前方距离为speed的位置的世界坐标向量*/


Vector3 VecSpeed = LocalForward - LocalPos;/*物体自身Vector3.forward * speed的世界坐标向量*/


rigidbody.velocity = new Vector3 (VecSpeed.x,VecSpeed.y,VecSpeed.z);
}
}

0 0