Unity2D中如何计算子弹的弹道?

How to calculate the trajectory of bullet in Unity2D?

我正在玩子弹沿抛物线运动的 2D 游戏,但在我射击弹丸之前我希望能够计算出它的轨迹。

            float velocity = Mathf.Min(Mathf.Max(distance, 1), 2.5f);
        float cos = Mathf.Cos( (gameObject.transform.localEulerAngles.z + 90) * Mathf.Deg2Rad);
        float sin = Mathf.Sin( (gameObject.transform.localEulerAngles.z + 90) * Mathf.Deg2Rad);
        newGO.GetComponent<Rigidbody2D>().AddForce(velocity * new Vector3(cos, sin))

此代码将 rigidbody2d 添加到我的子弹 (newGO) 中。我尝试在使用它飞行 1 秒后计算一个点:

Debug.Log(new Vector3(source.transform.position.x + velocity * 1 * cos, source.transform.position.y + velocity * sin * 1 + Physics2D.gravity.y * 0.5f * 1));

很遗憾,return 结果不正确。我应该怎么办? 感谢您的帮助,对不起我的英语。

我认为作为弹丸你应该使用 Rigidbody2D.velocity 来设置弹丸的初始速度而不是 Rigidbody2D.AddForce。 (虽然文档不推荐)

这个简单的脚本预测附加对象在由变量 "timeLimit" 确定的时间内的位置,并将 "target" 游戏对象移动到该点。

public class Velocity : MonoBehaviour {

    public GameObject target;

    private float HoriInitialSpeed = 5;
    private float VertInitialSpeed = 5;
    private float timeLimit = 2;
    private float timeElapsed=0;

    void Start ()
    {
        float HoriPredict = HoriInitialSpeed * timeLimit;
        float VertiPredict = VertInitialSpeed* timeLimit + (0.5f * Physics2D.gravity.y * timeLimit * timeLimit);

        target.transform.Translate(HoriPredict, VertiPredict,0);
        GetComponent<Rigidbody2D>().velocity = new Vector2(HoriInitialSpeed, VertInitialSpeed);
    }

    void Update () {
        timeElapsed += Time.deltaTime;
        if(timeElapsed >= timeLimit)
        {
            //stop the bullet
            GetComponent<Rigidbody2D>().velocity = new Vector2(0, 0);
            GetComponent<Rigidbody2D>().gravityScale = 0;
        }
    }
}

注意:子弹和目标一开始必须在同一点