Суббота, 23 Ноября 2024, 13:01

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Направление с анимацией Curve
SpringДата: Вторник, 22 Февраля 2022, 12:38 | Сообщение # 1
частый гость
Сейчас нет на сайте
У объекта есть направление и анимация curve, мне нужно, чтобы анимация подстраивалась под направление, но как это сделать я не знаю.
Вот изначальный код:
Код

    public Transform Target;
    public Vector3 MoveDirection;
    public AnimationCurve CurveAnim;
    float curveTime;
    void Start () {
        MoveDirection = Target.position - transform.position;
        MoveDirection = MoveDirection.normalized;
        CurveAnim = new AnimationCurve
            (new Keyframe(0, -1), new Keyframe(1, 1), new Keyframe(2, -1));
        CurveAnim.preWrapMode = WrapMode.Loop;
        CurveAnim.postWrapMode = WrapMode.Loop;
    }
    void Update () {
        transform.Translate(MoveDirection * Time.deltaTime);
        curveTime += Time.deltaTime;
        transform.position = new Vector3(transform.position.x, CurveAnim.Evaluate(curveTime), 0);
    }

Все мои попытки сделать то что я хочу были тщетны.

Вот визуализация:

Красная линия тот как он сейчас движется.
Зелёная линия тот как он должен двигаться.

Желательно чтобы решение не представляло собой вращение всего объекта.


Сообщение отредактировал Spring - Вторник, 22 Февраля 2022, 13:09
DmitriyIMДата: Вторник, 22 Февраля 2022, 21:05 | Сообщение # 2
частый гость
Сейчас нет на сайте
Цитата Spring ()
Желательно чтобы решение не представляло собой вращение всего объекта.


Нужно вращать, а точнее добавлять к:
Цитата Spring ()
Код
transform.position = new Vector3(transform.position.x, CurveAnim.Evaluate(curveTime), 0);


cos и sin от угла направления.
drcrackДата: Вторник, 22 Февраля 2022, 21:34 | Сообщение # 3
старожил
Сейчас нет на сайте
оставь cos и sin для уроков геометрии, в юнити есть инструменты поудобнее
но нужно хранить виртуальную позицию до применения анимации
Код
Vector3 position;

void Start () {
    // ......
    position = transform.position;
}

void Update () {
    position += MoveDirection * Time.deltaTime;
    transform.position = position + Quaternion.LookRotation(MoveDirection) * new Vector3(0, CurveAnim.Evaluate(Time.time), 0);
}
SpringДата: Вторник, 22 Февраля 2022, 21:45 | Сообщение # 4
частый гость
Сейчас нет на сайте
drcrack, Благодарю!
DmitriyIMДата: Вторник, 22 Февраля 2022, 22:08 | Сообщение # 5
частый гость
Сейчас нет на сайте
Цитата drcrack ()
оставь cos и sin для уроков геометрии, в юнити есть инструменты поудобнее


А что там у этих инструментов внутри, магия? ;) Если человек поймет алгоритм, он и без них сможет все сделать....

Для меня понимание, всегда важнее, чем поиск готового ответа. Если я не прав, то извини ok
SpringДата: Вторник, 22 Февраля 2022, 23:01 | Сообщение # 6
частый гость
Сейчас нет на сайте
Цитата DmitriyIM ()
Для меня понимание, всегда важнее, чем поиск готового ответа.

Цитата DmitriyIM ()
Нужно вращать, а точнее добавлять к: "код"
cos и sin от угла направления.

Этот ответ мне даёт только больше вопросов, я не прочь узнать алгоритм, но мне нужен ответ.
drcrackДата: Среда, 23 Февраля 2022, 05:14 | Сообщение # 7
старожил
Сейчас нет на сайте
Цитата DmitriyIM ()
А что там у этих инструментов внутри, магия? Если человек поймет алгоритм, он и без них сможет все сделать....
Для меня понимание, всегда важнее, чем поиск готового ответа. Если я не прав, то извини

Если новичку пытаться разобраться как все работает под капотом, на игру времени не останется
Достаточно знать как повернуть вектор посредством умножения на кватернион, а детали как это работает слишком низкоуровневые чтобы иметь практическое применение в большинстве случаев
И вот еще пара причин почему ответ "cos и sin от угла направления." плохой:
1) работает только в самом примитивном случае, ломается при добавлении третьего измерения в анимацию/движение
2) все равно нужно хранить позицию до анимации о чем ты не упомянул
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг