个人接触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.useGravity = false;
}
// Update is called once per frame
void Update () {
}
void FixedUpdate() {
Vector3 LocalPos = transform.position;
Vector3 LocalForward = transform.TransformPoint(Vector3.forward * speed);
Vector3 VecSpeed = LocalForward - LocalPos;
rigidbody.velocity = new Vector3 (VecSpeed.x,VecSpeed.y,VecSpeed.z);
}
}