2017-01-14 16 views
-1

Я devoloping TopDown-Shooter с Unity. Камера, чтобы следовать за игроком получил его преобразованиеЦентр камеры сверху вниз на 65 градусов

  • положение: 0,20,0
  • вращение: 65,0,0

камера использует эту простую команду следовать:

private void Update() 
    { 
     transform.position = new Vector3(playerTransform.position.x, transform.position.y, playerTransform.position.z); 
    } 

Из-за того, что камера повернута на 65 градусов по оси x, камера больше не центрирована.

Ingame View

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

Чтобы исправить свою проблему, я мог бы установить камеру (0,20, -10), но мне нужно ее вычислить, потому что она вернется, если она не рассчитана в обновлении.

На данный момент я просто вычислительное -20 на оси Z в сценарии:

private void Update() 
    { 
     transform.position = new Vector3(playerTransform.position.x, transform.position.y, playerTransform.position.z - 20); 
    } 

, и я хочу, чтобы заменить это значение с правильным значением.

ответ

0

Представьте свою сцену как правый треугольник с прямой линией камеры, направленной вниз по гипотенузе (example). Мы знаем высоту камеры с земли, 20 единиц, и мы знаем, что камера делает относительно вертикальной, 35 градусов (90 - 65 = 35). Теперь нам нужно просто решить для горизонтального расстояния X.

Наше уравнение мы будем в:

Tan(35 degrees) = X/20 
X = Tan(35 degrees) * 20 
X = 14.004... 

Так ваше предположение о 10 не было слишком далеко. Чтобы поместить это в код, который вы получите:

private void Update() 
{ 
    float zDistance = Mathf.Tan(transform.eulerAngles.X * Mathf.Deg2Rad) * 20; 
    transform.position = new Vector3(
     playerTransform.position.x, 
     transform.position.y, 
     playerTransform.position.z - zDistance); 
} 

Если угол камеры не изменится, то zDistance не изменится, и вы можете просто вычислить его один раз в Start().

 Смежные вопросы

  • Нет связанных вопросов^_^