首页>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)上绕行,则直接向该行星射击.我无法解释这一点,因为照相机一直朝着行星,并且十字线始终位于两者之间,炸弹反而与它们分离。

最新回答
  • 2021-1-2
    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:如何参考两种类型的加载屏幕?