@Stalder

Unity. Почему вращение применяется, но результата не видно?

Доброго времени суток. Задача такова: надо повернуть персонажа по направлению вектора. Использован обычный FPSController, на него ссылается player во втором методе.
Вращение отдельно камеры не предлагать.
void throwPortal(GameObject portal, bool isItFirst) {
        int x = Screen.width / 2;
        int y = Screen.height / 2;
        Ray ray = player.GetComponent<Camera>().ScreenPointToRay(new Vector3(x, y));
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit)) {
            if (isItFirst) firstDirection = hit.normal;
            else secondDirection = hit.normal;
            portal.transform.position = hit.point;
            portal.transform.rotation = Quaternion.LookRotation(hit.normal); // здесь вращение применяется
        }
    }

void OnTriggerEnter(Collider other) {
        Debug.Log("Inside trigger");
        if (other.tag == "Player") {
            other.transform.position = otherPortal.transform.position + otherPortal.transform.forward*1;
            if (isFirst) direction = other.GetComponent<ThrowPortal>().getDirectionSecond();
            else direction = other.GetComponent<ThrowPortal>().getDirectionFirst();

            Debug.Log("Изначальное вращение"+player.transform.rotation.ToString());
            Debug.Log("То что должно быть" + Quaternion.LookRotation(direction).ToString());
            player.transform.rotation =Quaternion.LookRotation(direction); //  !!! сам акт поворота !!!
            Debug.Log("Результат" + player.transform.rotation.ToString()); // показывает то же самое, что и вывод выше
            player.transform.position += direction * 5; // эта строка работает корректно, то бишь вектор не потерялся
        }
    }

Буду благодарен за любую помощь.
  • Вопрос задан
  • 406 просмотров
Решения вопроса 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Я так понимаю, что FPSController вы взяли из стандартных юнитёвых скриптов? Он вращение камеры хранит внутри себя и в каждом кадре его применяет, ваше значение поворота просто перезаписывается контроллером.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
YuliyF
@YuliyF
программист С/С++/С#, клиентская-серверная.
if (isFirst) direction = other.GetComponent<ThrowPortal>().getDirectionSecond();
            else direction = other.GetComponent<ThrowPortal>().getDirectionFirst();

тут разве не нужно наоборот? если 1й раз то брать .getDirectionFirst(); - ?

other.transform.position = otherPortal.transform.position + otherPortal.transform.forward*1;

какой смысл этой строки? складываете позицию и направление зачем-то умноженное на 1 ...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы