需要帮助球体作为抛物线模拟器的一部分在抛物线中运动吗?

时间:2018-12-09 14:44:29

标签: c# unity3d projectile

您好,我目前正在从事一个学校计算机科学项目,为此我决定制作一个简单的射弹模拟器,用户只需提供初始发射速度,发射角度和重力即可。 到目前为止,我已经尝试制作一个脚本,使用这些值来计算轨迹模式并随着时间的推移更改球体在平面上的y和z位置。

public class SphereJump : MonoBehaviour{

    public float gravity = 9.8f;
    public float InitialSpeed = 10.0f;
    public float LaunchAngle = 45.0f;

    public Transform Sphere;

    void Start () {

        float InitialX = Mathf.Sin(LaunchAngle) * InitialSpeed;
        float InitialY = Mathf.Cos(LaunchAngle) * InitialSpeed;

        float Range = Mathf.Sin(2*LaunchAngle)*Mathf.Pow(InitialSpeed,2)/gravity;

        float MaxHeight = Mathf.Sin(LaunchAngle) * Mathf.Pow(InitialSpeed, 2) / 2 * gravity;

        float FlightTime = Range / InitialX;

        float ElapsedTime = 0;

        while (ElapsedTime < FlightTime)
        {
            float NewPositionX = transform.position.z+InitialX*ElapsedTime;
            float NewPositionY = transform.position.y +InitialY -gravity / 2*ElapsedTime;

            Sphere.Translate(0f, NewPositionY, NewPositionX);

            ElapsedTime += Time.deltaTime;
        }
    }

}

对Unity完全陌生,在我的脑海中这应该在数学上起作用,但是当我运行游戏时,什么也没有发生或球体对象消失了。一开始它的位置是(1,0.5,1)-仅比它所在的平面高0.5-据我所知,脚本已正确附加。还会出现警告,提示“由于浮点精度限制...”。使用Vector3会有所帮助吗?我是否完全混淆了脚本?

1 个答案:

答案 0 :(得分:0)

它应该放在Update()中,您可以自己添加该方法并移动代码。

关于第二个问题:

向量3是3D空间中X,Y和Z的点位置的坐标系!您将需要一个z坐标来表示深度,或者统一知道对象的放置位置

所以:

Vector3 newPos= new Vector3(x,y,z);
如果您不希望与相机的距离变化,

z可以保持恒定。

Vector3 newPos= new Vector3(transform.position.z+InitialX*ElapsedTime,transform.position.y +InitialY -gravity / 2*ElapsedTime,z);

但是

一个统一的组件叫做刚体。将其附加到您的物体上将增加重力和物理强度。

然后您可以在脚本中获取刚体:

RigidBody body = this.GameObject.GetComponent<RigidBody>();

然后您可以做:

body.AddForce(position,direction,force);

body.gravity=3;

或进行其他一些调整以融入您的物理挑战。