首页 文章

作为弹丸模拟器的一部分,需要帮助使球体在抛物线中移动?

提问于
浏览
0

嗨,我目前正在研究一个学校的计算机科学项目,我决定制作一个简单的射弹模拟器,用户只需提供初始发射速度,发射角度和重力 . 到目前为止,我已经尝试制作一个脚本,使用这些值来计算轨迹模式,并随着时间的推移改变球体在平面上的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

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

    至于你的第二个问题:

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

    所以:

    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;

    或其他一些调整,以加剧你的物理挑战 .

相关问题