Перенос/блокировка другой камеры камеры

74
7

Я разрабатываю игру, которая использует просмотр камеры третьего лица, централизованный характер, никаких проблем с этим. Но я не могу найти способ "заблокировать" на другом объекте, сохраняя при этом моего персонажа (шаровая камера Rocket League: https://youtu.be/FDcO04gXihM).

Я знаю метод lookAt(), но этого недостаточно. Мне все еще нужно рассчитать положение камеры, чтобы не оставаться между игроком и мишенью. Проблема: http://imgur.com/a/MdO9m

Это то, что я сейчас делаю, чтобы переместить камеру ("свободная камера"):

 if (freeCam) {
transform.position = Vector3.Lerp(transform.position, camTarget.transform.position, speed);
transform.rotation = Quaternion.Lerp(transform.rotation, camTarget.transform.rotation, speed);
} else {
// Lock cam
}

CamTarget - игровой объект, родившийся для игрока.

спросил(а) 2021-01-28T00:46:47+03:00 1 месяц назад
1
Решение
86

Теперь я понимаю, в чем ваша проблема, и попытайтесь объяснить решение.

Скажем, у вас есть объект игрока как PO и целевой объект TO и объект камеры CO.

Поэтому, когда вы хотите достичь, следить за просмотром камеры всегда с целевым объектом и поддерживать объект игрока между ними, все, что вам нужно сделать ->

СО должен перемещаться вокруг ПО на орбите (орбитальная камера) с фиксированным расстоянием. Затем создайте вектор из точки TO в PO (центр орбиты CO) Затем вычислите 2 точки попадания вектора (TO | PO) с орбитой. Теперь у вас есть точка входа ENP и точка выхода EXP. В векторах всегда есть направление, которое EXP всегда будет точкой, если вы сохраните направление от TO до PO. Установите позицию CO в EXP и посмотрите на TO Примените фиксированное смещение к EXP, соответствующее world.upvector, чтобы всегда сидеть над PO. [optional] Если поверхность существует, выполните обнаружение столкновения с EXP против поверхности. Если вы нажмете, установите EXP в точку обнаружения столкновений и установите PO render в false. Как только EXP больше не сталкивается с поверхностным набором PO рендеринга в true. [optional] Если вы хотите, чтобы всегда иметь хороший вид, а затем всегда хорошо смотря на PO, возьмите угол переднего вектора CO. Если это четверть я IV (положение угла в математике), вы можете предположить, что ур в настоящее время просто видит ПО, а не ТО, потому что камера сидит прямо за ПО и смотрит в ТО прямо через ПО. Если это произойдет, установите PO render в false. Как только угловой векторный угол вперед четвертого квартала II-IV, установите PO render в true.

Это. Сегодня я постараюсь дать вам более подробный код, потому что сейчас я на работе.

ответил(а) 2021-01-28T00:46:47+03:00 1 месяц назад
44

Возможно, вы можете проверить, находится ли положение камеры между игроком и целью и просто поверните его на 180º

ответил(а) 2021-01-28T00:46:47+03:00 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема