個人接觸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);
}
}