C# 如何计算Unity2D中的子弹轨迹?

C# 如何计算Unity2D中的子弹轨迹?,c#,unity3d,physics,projectile,C#,Unity3d,Physics,Projectile,我在做一个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

我在做一个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.velocity来设置抛射体的初始速度,而不是Rigidbody2D.AddForce。(尽管本文件不建议)

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

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;
        }
    }
}
公共类速度:单一行为{
公共游戏对象目标;
私人浮动水平速度=5;
私人浮动垂直速度=5;
私人浮动时限=2;
私有浮点时间经过=0;
无效开始()
{
浮动水平预测=水平初始速度*时间限制;
浮动垂直预测=垂直速度*时间限制+(0.5f*物理2D.重力.y*时间限制*时间限制);
target.transform.Translate(水平预测,垂直预测,0);
GetComponent().velocity=新矢量2(水平初始速度、垂直初始速度);
}
无效更新(){
timeappeased+=Time.deltaTime;
如果(时间经过>=时间限制)
{
//阻止子弹
GetComponent().velocity=新向量2(0,0);
GetComponent().gravityScale=0;
}
}
}

注意:子弹和目标必须在同一点上,特别是“不正确计数”请解释它的错误之处。说出你期望得到的,并展示你实际得到的。例如:bullet的x=2.7,y=-1.14在1秒后,但我的代码返回(x,y)=(1.5,-4.9)在你的问题中加入这样的信息,你说你想预测一秒钟后你的发射物将在哪里?@ScottChamberlain,“不正确”OP在英语中的意思是“我得到了错误的结果”。我希望我能把第三种语言说得那么好!非常感谢你的帮助@乔·布伦斯的主人Pawelsar1我希望很快能玩你的游戏
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;
        }
    }
}