我正在从绕行星飞行的飞船上投下炸弹.我的相機固定在船上。
我通過在始终面向行星的相機位置例項化炸弹来發射炸弹,但是,炸弹並非旨在直接朝行星中心移動.而是在相機和行星之間有一个可移動的十字準線,我希望炸弹从相機朝十字準線的方向移動.我的炸弹指令碼如下所示:public class bomb : MonoBehaviour {
public float speed;
GameObject crosshair;
// Use this for initialization
void Start () {
crosshair = GameObject.Find ("Crosshair");
transform.SetParent (null);
transform.LookAt (crosshair.transform);
}
// Update is called once per frame
void Update () {
transform.Translate (transform.forward * Time.deltaTime * speed);
}
}
我的期望是,炸弹在相機處例項化,与其父級(相機)分离,轉向面對十字準線,然後朝该方向移動,直到其撞击地球。
但是那不会發生。
由於未知原因,射弹会在相機左侧移動.因此,我將弹丸調整為將transform.right而不是transform.forward移動.這行得通-一半的時間。
這是西方(工作中)的樣子:
這是东部的樣子(不起作用):
弹丸很小,但是請相信我,它们在那裏。
如上所述,我的飞船正在绕地球飞行.如果它在一个半球(0:180)上绕行,則朝着该行星射击,但如果它在另一个半球(0:-180)上绕行,則直接向该行星射击.我無法解釋這一點,因為照相機一直朝着行星,並且十字線始终位於两者之間,炸弹反而与它们分离。
最新回復
- 5月前1 #
相似問題
- rotation:Unity-MathfLerp()不能按預期工作?unityrotationlerp2020-12-25 11:26
- unity:世界地位轉變為当地地位unitymathematicsrotationposition2020-12-18 19:55
当您像在 此代碼:
預設使用
Space.Self
其中考虑了物件的所有三个位置,旋轉和比例.這就是為什麼您的代碼在西侧起作用,但在向东旋轉時不再起作用的原因。所以您只需要使用
Space.World
在你的飞天 方法:這將使物件相對於單位(0,0,0)移動.這樣,無論您的弹丸朝向哪个方向,它们都將始终向前移動。
transform.Translate (transform.forward * Time.deltaTime * speed, Space.World);