【问题标题】:Shoot projectile at exact angle以准确的角度射击弹丸
【发布时间】:2015-10-06 20:19:59
【问题描述】:

我正在尝试开发一种简单的射击机制,该机制根据射击者的旋转角度实例化“射击”。我的问题是即使射手的方向是 0*,射击的角度是 45*(这是我猜的问题,因为当射手的方向是 45* 时,射击是准确的90*)。

射手角度(0,0,0)

射手角度(0,0,45)

注意-球总是从黑色扁平圆柱体的中心发射。

所需代码:

public class ShotMoveScript : MonoBehaviour {
    public static float xForce;
    public Transform shott;
    void Update () {
        if(Input.GetKey(KeyCode.Q))
        {
            transform.Rotate(Vector3.forward, 5f);
        }

        if(Input.GetKey(KeyCode.E))
        {
            transform.Rotate(Vector3.forward, -5f);
        }

        if(Input.GetKey(KeyCode.Space))
        {
            xForce += 0.2f;
        }

        if(Input.GetKeyUp(KeyCode.Space))
        {
            Instantiate(shott, transform.position, transform.rotation);
        }

    }
}

附加到被实例化的球的脚本:

public class MovementScript : MonoBehaviour {
    void Update () {
        Rigidbody2D rb;
        rb = GetComponent<Rigidbody2D> ();
        rb.gravityScale = 0.8f;
        transform.Translate( new Vector3(1,1,0) * ShotMoveScript.xForce * Time.deltaTime, Space.Self);
    }
}

【问题讨论】:

  • 您好,您可以发布您的代码示例吗?
  • 对不起,我忘了,等一下
  • 对这个问题投了反对票的人,你能告诉我你为什么这么做吗?谢谢:)

标签: c# unity3d unity5


【解决方案1】:

在使用第三个参数rotation 实例化球时,您会旋转球(参见reference)。 之后,您应用一个指向 (1, 1) 的向量,这样球就会沿着那个方向移动相对于他的局部旋转

要么将Quaternion.identity 作为第三个参数传递给Instantiate 方法,要么将球沿(1, 0) 方向移动。

【讨论】:

  • Quaternion.identity 根本没有解决问题。无论射手的旋转角度如何,它现在总是以 45 度角射球。沿 1,0,0 移动球也无济于事。但是我几乎通过沿 0,1,0 移动它得到了我需要的东西。现在发生的情况是在 0*,球在 90* 处射门,在 270* 处,球在 0* 处射门。
  • @AkashAggarwal 也许您在重新编译之前运行了 Unity 以及您的最新更改。这种情况有时会发生。
  • 可能是。我以前见过 Unity 变得喜怒无常。题外话,您目前正在使用 Unity 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 2019-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多