Направление с анимацией 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 для уроков геометрии, в юнити есть инструменты поудобнее
А что там у этих инструментов внутри, магия? Если человек поймет алгоритм, он и без них сможет все сделать....
Для меня понимание, всегда важнее, чем поиск готового ответа. Если я не прав, то извини
|
|
| |
Spring | Дата: Вторник, 22 Февраля 2022, 23:01 | Сообщение # 6 |
частый гость
Сейчас нет на сайте
| Цитата DmitriyIM ( ) Для меня понимание, всегда важнее, чем поиск готового ответа.
Цитата DmitriyIM ( ) Нужно вращать, а точнее добавлять к: "код" cos и sin от угла направления. Этот ответ мне даёт только больше вопросов, я не прочь узнать алгоритм, но мне нужен ответ.
|
|
| |
drcrack | Дата: Среда, 23 Февраля 2022, 05:14 | Сообщение # 7 |
старожил
Сейчас нет на сайте
| Цитата DmitriyIM ( ) А что там у этих инструментов внутри, магия? Если человек поймет алгоритм, он и без них сможет все сделать.... Для меня понимание, всегда важнее, чем поиск готового ответа. Если я не прав, то извини Если новичку пытаться разобраться как все работает под капотом, на игру времени не останется Достаточно знать как повернуть вектор посредством умножения на кватернион, а детали как это работает слишком низкоуровневые чтобы иметь практическое применение в большинстве случаев И вот еще пара причин почему ответ "cos и sin от угла направления." плохой: 1) работает только в самом примитивном случае, ломается при добавлении третьего измерения в анимацию/движение 2) все равно нужно хранить позицию до анимации о чем ты не упомянул
|
|
| |