Нужна помощь в перемещении сферы в параболе как части симулятора снаряда? - PullRequest
0 голосов
/ 09 декабря 2018

Привет. В настоящее время я работаю над школьным проектом по информатике, для которого я решил создать простой симулятор снаряда, в котором пользователь просто указывает начальную скорость запуска, угол запуска и гравитацию.До сих пор я пытался создать сценарий, который использует эти значения для расчета шаблона траектории и изменения положения 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 голосов
/ 09 декабря 2018

это должно войти в Update(), вы можете добавить этот метод самостоятельно и переместить код.

что касается вашего второго вопроса:

Вектор 3 - это система координат для положения точки в трехмерном пространстве, 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;

или несколько других корректировок для решения вашей проблемы с физикой.

...