Войти
Unreal EngineФорумОбщее

Расчёт угла вращения объекта

#0
18:36, 8 мая 2020

Всех приветствую! Вопрос в следующем: нужно вращать объект (CameraActor) в зависимости от нахождения мыши - либо слегка вправо, либо слегка влево (значение угла меняется в переменной).

Но вот беда, чтобы повернуть объект, мне надо менять сразу X, Y, Z (точнее, Roll, Pitch, Yaw) - по крайней мере так происходит при повороте на сцене вручную. Лично я считаю пока так: беру координату Pitch, прибавляю-отнимаю нужное значение, провожу через Make Vektor, применяю SetActorRotation, и всё вроде работает, но вот объект крутится ещё немного и по оси Z. Как бы рассчитать значение Z, я гуглил мануалы, там скрины из 20 нод ребята собирают. Может, есть что-то более простое?

Дальнейшее гугление также дало якобы простой способ Rotating Movement Component, но мануалов по нему что-то нет, и как добраться до его значений тоже. В видеомануалах просто показывают, как внутри эктора непрерывно закрутить объект, а мне даже до этого компонента из другого эктора не выйти.

Буду благодарен за наводки. Честно гуглил весь вечер, простых решений не нашёл, а вопрос должен быть простым. Если что, речь о блупринтах, не о коде С++.


#1
(Правка: 18:50) 18:41, 8 мая 2020

papa
через контроллер то никак?

  /**
   * Add Pitch (look up) input. This value is multiplied by InputPitchScale.
   * @param Val Amount to add to Pitch. This value is multiplied by InputPitchScale.
   */
  UFUNCTION(BlueprintCallable, Category="Game|Player", meta=(Keywords="up down"))
  virtual void AddPitchInput(float Val);

чет мне кажется что тебе нужно курить про кватернион или ротатор, там вроде можно прибавлять относительные вращения

#2
21:38, 8 мая 2020

> провожу через Make Vektor
Какую задачу решает преобразование в вектор (и, очевидно, немедленно вектора в ротатор)?

#3
21:40, 8 мая 2020

метод AddActorLocalRotation

https://docs.unrealengine.com/en-US/BlueprintAPI/Utilities/Transf… on/index.html

#4
21:54, 8 мая 2020

talashby
Спасибо, очень похоже на то.
Я, правда, уже её почти решил - через Find Look at Rotation (от двух объектов) - Make Rotator - SetRelationRotation, но пришлось прерваться над решением до завтра. Вот если кому интересно, с 9-й минуты: https://www.youtube.com/watch?v=8EmFF5PofrY

#5
23:32, 8 мая 2020

papa пожалуйста

Если вам нужен поворот вправо-влево от текущего произвольного направления, то это делается через кватернионы. Просто прибавить yaw pitch roll неправильно, потому что они отсчитываются от нулевого направления, а не от произвольного.

метод AddActorLocalRotation внутри переводит дельта-ротатор в кватернион и поворачивает на эту дельту от текущего направления.

#6
8:20, 9 мая 2020

talashby
> метод AddActorLocalRotation внутри переводит дельта-ротатор в кватернион и
> поворачивает на эту дельту от текущего направления.

Спасибо!

Unreal EngineФорумОбщее