2016-07-23 3 views
1

В настоящее время у меня есть следующие два вопроса:Сброс положение относительно вращения

  • Первая проблема в том, что, когда я сбросить свою позицию камеры я должен также сбросить мое вращение камеры. Это связано с тем, что моя камера смещена в положение немного от моего плеера на оси z и y , и, очевидно, эти значения должны меняться в зависимости от моих камер вращения, хотя я не уверен, как определить, что эти значения должно быть.

  • Мой второй вопрос заключается в том, что мое вращение использует raycast найти середине экрана и определить его вращения происхождения, хотя это, кажется, немного от середины экрана, как когда он поворачивает вращение координат движется также, если это действительно находится в середине экрана не должно ли оно быть полностью неподвижным? Также есть лучший и менее дорогой способ достижения моего желаемого вращения?

Соответствующий фрагмент кода:

void RotateCamera() 
{ 
    //Find midle of screen 
    Ray ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width/2, Screen.height/2, 0)); 
    RaycastHit hitInfo; 

    //Checks if ray hit something 
    if (Physics.Raycast(ray, out hitInfo)) 
    { 
     //Rotate left and right 
     if (Input.GetKey(KeyCode.RightArrow)) 
     { 
      transform.RotateAround(hitInfo.point, -Vector3.up, rotationSpeed * Time.deltaTime); 
     } 
     if (Input.GetKey(KeyCode.LeftArrow)) 
     { 
      transform.RotateAround(hitInfo.point, Vector3.up, rotationSpeed * Time.deltaTime); 
     } 
    } 

    //Draws Raycast 
    Debug.DrawRay(ray.origin, ray.direction * 100, Color.yellow); 
} 

void ResetCameraPosition() 
{ 
    //Reset and lock camera position 
    transform.rotation = Quaternion.identity; 
    transform.position = player.transform.position + cameraOffset; 

} 

Image displaying what I mean

+0

Можете ли вы объяснить немного больше того, что вы на самом деле хотите сделать для камеры? Я думаю, что получаю, что вы хотите повернуть вокруг точки и по требованию сбросить текущие позиции игроков, но, пожалуйста, подтвердите. – Absinthe

+0

Да, и скриншот или рисунок (даже программист) помогут много –

+0

@Absinthe Да, извините, что в основном это я хочу повернуть камеру вокруг самой середины экрана, так что в основном она вращается вокруг того, что когда-либо это отлично смотря, код, который я сейчас делаю, хорошо справляется с этим, но его фокусная точка слегка перемещается при повороте, и это кажется дорогостоящим способом расчета. А что касается части вращения перезагрузки, я хочу сбросить свою камеру так, как она уже повернута, хотя она позиционируется таким образом, чтобы увидеть моего персонажа. Надеюсь, это очистит его. Благодаря! –

ответ

0

Использование Camera.ScreenToWorldPoint создать 'мишень' в середине экрана, вокруг которого с возможностью поворота. Удалите все материалы raycasting по мере необходимости и замените соответствующие биты на:

float rotationSpeed = 45; // or whatever speed 
float distance = 5f; // or whatever radius for the orbit 
Vector3 target = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width/2, Screen.height/2, distance)); 

if (Input.GetKey(KeyCode.RightArrow)) 
{ 
    transform.RotateAround(target , -Vector3.up, rotationSpeed * Time.deltaTime); 
} 
if (Input.GetKey(KeyCode.LeftArrow)) 
{ 
    transform.RotateAround(target , Vector3.up, rotationSpeed * Time.deltaTime); 
} 
+0

Проблема с этим кодом - я не знаю своего расстояния, следовательно, raycast, также он не отвечает на первую и основную часть моего вопроса. –

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