首頁>Game>source

我正在从绕行星飞行的飞船上投下炸弹.我的相機固定在船上。

我通過在始终面向行星的相機位置例項化炸弹来發射炸弹,但是,炸弹並非旨在直接朝行星中心移動.而是在相機和行星之間有一个可移動的十字準線,我希望炸弹从相機朝十字準線的方向移動.我的炸弹指令碼如下所示:

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 #

    当您像在 此代碼:

    transform.Translate (transform.forward * Time.deltaTime * speed);
    

    預設使用 Space.Self 其中考虑了物件的所有三个位置,旋轉和比例.這就是為什麼您的代碼在西侧起作用,但在向东旋轉時不再起作用的原因。

    所以您只需要使用 Space.World 在你的飞天 方法:

    transform.Translate
    

    這將使物件相對於單位(0,0,0)移動.這樣,無論您的弹丸朝向哪个方向,它们都將始终向前移動。

    transform.Translate (transform.forward * Time.deltaTime * speed, Space.World);

  • unity:如何正確停止滑動
  • rendering:如何參考两種型別的載入螢幕?