Плавное вращение камеры вокруг игрока от 3-го лица

У меня проблема с плавным вращением, пытаюсь сделать игру с системой вращения как в Temple Run. Я понятия не имею, как плавное вращение с помощью lerp, например, привязать к смещению.

//Position
 public GameObject player;
 private Vector3 offSet;

 //Rotation
 //Quaternion localRotation;
 Quaternion leftRotation = Quaternion.Euler(new Vector3 (0, 90, 0));
 Quaternion rightRotation = Quaternion.Euler(new Vector3 (0, -90, 0));

 Vector3 lRotation = new Vector3(0.0f, -90f, 0.0f);
 Vector3 rRotation = new Vector3(0.0f, 90f, 0.0f);

 void Start () {
     offSet = transform.position - player.transform.position;
 }

 void Update () {
 }

 void LateUpdate(){

     transform.position = player.transform.position + offSet;
     transform.LookAt (player.transform);

     if (Input.GetKeyDown (KeyCode.LeftArrow) && GameObject.Find("Player").GetComponent<PlayerMovement>().turn) {

         offSet = Quaternion.Euler(lRotation)*offSet;
         transform.position = player.transform.position + offSet;
         transform.LookAt (player.transform);

     } else if (Input.GetKeyDown (KeyCode.RightArrow) && GameObject.Find("Player").GetComponent<PlayerMovement>().turn) {

         offSet = Quaternion.Euler(rRotation)*offSet;
         transform.position = player.transform.position + offSet;
         transform.LookAt (player.transform);
     }
 }

}


person martinalbert    schedule 19.02.2016    source источник


Ответы (1)


Я предлагаю выполнить Transform.RotateAround() для преобразования камеры, используя игру игрока. -объект для оси.

Пример:

//in camera-code
transform.RotateAround(player.transform.position, Vector3.up, 45f);

Надеюсь, это поможет!

EDIT: Кроме того, вы также можете использовать Mathf.LerpAngle вместо фиксированного значения в качестве третьего параметра, чтобы обеспечить более плавные результаты.

person andeart    schedule 19.02.2016
comment
Спасибо, я не уверен, что это сработает, мне нужно, чтобы он оставался в этом вращении, потому что, когда я вызываю RotateAround, когда я нажимаю клавишу, он просто вращается в вращении, которое я сразу же устанавливаю, и возвращается к вращению по умолчанию, так как я могу заставить его остаться в этом вращении? - person martinalbert; 21.02.2016
comment
Хорошо, я использую эту функцию Mathf.LerpAngle для этого, и она работает очень хорошо, единственная проблема теперь состоит в том, чтобы остановить вращение от зацикливания после нажатия клавиши. - person martinalbert; 21.02.2016
comment
@MrAbeckon Я не уверен, что понимаю. Не могли бы вы уточнить? - person andeart; 22.02.2016
comment
Моя камера теперь вращается так, как я хочу, когда я нажимаю клавишу, но она постоянно вращается, вместо этого я хочу остановить вращение после поворота камеры на -90°/+90°. Теперь это мой код: stackoverflow.com/questions/35541760/ - person martinalbert; 22.02.2016
comment
В вашем коде по-прежнему не используется Transform.RotateAround, что, как мне кажется, облегчит вам (и всем остальным, кто использует тот же код) понимание. В любом случае, глядя на ваш код, я бы предложил использовать Debug.Log, чтобы найти значение lAngle во время работы игры и посмотреть, соответствует ли оно тому, что вы ожидаете. Я думаю, что это не соответствует условию if (lAngle > 90f). Всего наилучшего! - person andeart; 22.02.2016