Поворот объекта с помощью корутины

Рейтинг: -1Ответов: 1Опубликовано: 14.06.2023

У меня есть gameObject bg, вращением которого по оси Z можно управлять с помощью клавиш в Update. Я рассчитываю положение другого объекта на основе угла поворота таким образом:

private Vector3 _currentTargetPos;
_currentTargetPos = _target.localPosition;


float currentRotation = bg.transform.rotation.eulerAngles.z;
Quaternion rotation = Quaternion.AngleAxis(currentRotation, new Vector3(0f, 0f, 1f));   
       
Vector3 rotatedVector = rotation * (_currentTargetPos - bg.transform.position);
Vector3 rotatedPoint = rotatedVector + bg.transform.position;
_target.localPosition = rotatedPoint;

if (Input.GetKey(KeyCode.D))
   bg.transform.rotation = Quaternion.Euler(0f, 0f, currentRotation - 60f * Time.deltaTime);
else if (Input.GetKey(KeyCode.A))
   bg.transform.rotation = Quaternion.Euler(0f, 0f, currentRotation + 60f * Time.deltaTime);

Я хочу сделать так, чтобы в другом методе можно было указать угол поворота объекта bg на определенное количество градусов, и чтобы этот поворот учитывался при изменении положения bg в Update. Если совсем просто, я хочу добиться независимого вращения объекта bg с помощью клавиш и с помощью вызова другого метода одновременно.

Я пытаюсь создать корутину, в которой меняю угол. Изменить угол получается, но при этом поворот bg с помощью стрелок работает некорректно.

Я пробовал хранить угол поворота в отдельной переменной и прибавлять к bg.transform.rotation.eulerAngles.z, менять в корутине _currentTargetPos, но корректно повернуть bg всё равно не получается.

Вроде бы разгадка где-то рядом, но уже пару дней не могу понять где.

Как изменить угол поворота в другом методе с этой реализацией поворота и изменения положения в Update?

Ответы

▲ 0

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