Отскок в воздух

#c# #unity3d #game-physics #angle #rigid-bodies

#c# #unity3d #игра-физика #угол #твердые тела

Вопрос:

Я работаю над 2D-игрой, и мне нужен сборный отскок / взмах / прыжок снаряда в воздухе после того, как игрок нажмет на мышь. В этом случае, когда снаряд движется вдоль оси X, необходимо приложить силу, обратно пропорциональную угловому направлению снаряда по оси Y относительно его собственной линии оси x (только когда он имеет отрицательный угол по отношению к горизонтальной линии). Новая скорость должна быть минимально ниже предыдущей, деленная на процент «замедляющего фактора». Что-то вроде этого: описание углового отскока

Я новичок в Unity, поэтому я не знаю точно, какие команды использовать для применения этой обратной силы, я уже внимательно изучил документацию, но у меня не очень получилось. Код, который у меня есть до сих пор:

 {
    [Range( 0, 1 )]
    public float SlowDownFactor = 1;
    private Rigidbody2D red_rigidbody;


    public void ExecuteAirSpecial()
    {
        red_rigidbody = GetComponent<Rigidbody2D>();
        Vector3 redAng;
        red_rigidbody.AddRelativeForce(Vector3.Angle(redAng.y, -redAng.y) * SlowDownFactor);
    }
}
  

Ответ №1:

Очень сложно недооценить то, чего вы хотите достичь. Если траектория вашего объекта не соответствует нормальной параболической траектории движения, определяемой физикой твердого тела при приложении силы, вам нужно будет объяснить точное поведение траектории движения и угла объекта, чтобы узнать, может ли кто-нибудь вам помочь. Лучшим подходом было бы сделать это сначала с анимацией. Если вы недовольны результатом или хотите по-прежнему добиваться успехов в физике, возможно, анимационный подход поможет вам объяснить поведение объектов с помощью небольшого клипа.

Другим подходом было бы закодировать траекторию и угловое положение объекта с помощью вычислений в коде, но не физики, применяемой к объекту. Более амбициозный подход, чем анимационный.

В любом случае, я бы посоветовал вам сначала попытаться запустить свой проект, добавив силу и проверив поведение или обычное твердое тело, и тогда вы сможете перейти к более сложному поведению, которое вы хотите.

Комментарии:

1. Таким образом, движение, по сути, является параболой. Это как пушечное ядро, понимаешь? Но когда игрок использует одно из своих умений, мяч должен совершить «отскок» в воздухе, как при прыжке. И идея заключается в том, что пропорционально обратно пропорционально углу и ускорению траектории, по которой мяч будет двигаться по оси Y (когда он падает). Мне не нужно ничего менять по оси X. Если я смогу получить ускорение мяча по оси Y и применить его обратно к rigidbody2d, это должно сработать. Но поскольку я новичок в Unity, я понятия не имею, какую команду использовать и как я могу получить эти данные.

Ответ №2:

Итак, я еще раз взглянул на документацию Unity (после того, как, наконец, уснул и отдохнул), и решение было простым. Это был просто вопрос использования правильной номенклатуры. Вот рабочий код:

 {
    [Range( 0, 1 )]
    public float SlowDownFactor = 1;
    private Rigidbody2D red_rigidbody;


    public void ExecuteAirSpecial()
    {
        red_rigidbody = GetComponent<Rigidbody2D>();
        Vector2 red_velocity = red_rigidbody.velocity;
        if (red_velocity.y < 0)
        {
            red_rigidbody.AddForce(new Vector2(0, -red_velocity.y) / (SlowDownFactor / 100));
        }
    }
}