Flashgamedev.ru | Разработка и Монетизация Флэш игр
http://flashgamedev.ru/

Вращение камеры вокруг объекта и движение за ним
http://flashgamedev.ru/viewtopic.php?f=21&t=12029
Страница 1 из 1

Автор:  nedved8891 [ Вт окт 20, 2015 1:46 pm ]
Заголовок сообщения:  Вращение камеры вокруг объекта и движение за ним

Нужно реализовать поворот вокруг объекта и следовать за ним, приведу ниже код . Проблема в том, что происходят какое-то дёрганье камеры, наверное связанные с позиционированием, но как их исправить не знаю( Скрипт работает так объект движется и камера за ним, все замечательно. Когда зажать правый клик происходит поворот вокруг него , как только я отпускаю клик камера дёргается в другую точку, происходит смещение (
Код:
void LateUpdate () {

      if (!target)
         return;
      if (Input.GetMouseButton (1)) {
         ifRotation = true;
         x += Input.GetAxis ("Mouse X") * xSpeed * 0.02f;
         y -= Input.GetAxis ("Mouse Y") * xSpeed * 0.02f;

         distance -= (Input.GetAxis ("Mouse ScrollWheel") * 0.5f);
         distance = Mathf.Clamp (distance, minDistance, maxDistance);

         y = ClampAngle (y, yMinLimit, yMaxLimit);

         Quaternion rotation = Quaternion.Euler (y, x, 0);
         transform.rotation = rotation;

         Vector3 position = target.position - (rotation * Vector3.forward * distance + new Vector3 (0, - targetHeight, 0));
         transform.position = position;

         print("Rot: "+transform.position.x+" "+(transform.position.y-0.55f)+" "+transform.position.z);
         offsetX = transform.position.x;
         offsetZ = transform.position.z;
         offsetY = transform.position.y - 0.55f;
//         print("Povorot: "+transform.position);
      } else {
         ifRotation = false;

      }
   }
   public static float ClampAngle (float angle, float min, float max)
   {
      if (angle < -360)
         angle += 360;
      if (angle > 360)
         angle -= 360;
      return Mathf.Clamp (angle, min, max);
   }
   // Update is called once per frame
   void Update () {
      if (!ifRotation) {
         print ("Pos: "+offsetX+" "+offsetY+" "+offsetZ);
         movementX = ((player.transform.position.x + offsetX  - this.transform.position.x)) / maximumDistance;
         movementZ = ((player.transform.position.z + offsetZ - this.transform.position.z)) / maximumDistance;
         movementY = ((player.transform.position.y + offsetY - this.transform.position.y)) / maximumDistance;
         print ("Movement"+movementX+" "+movementY+" "+movementZ);
         this.transform.position += new Vector3 ((movementX * playerVelocity * 0.1f), (movementY * playerVelocity * 0.1f), (movementZ * playerVelocity * 0.1f));
      }
   }

Автор:  romamik [ Ср окт 21, 2015 2:35 pm ]
Заголовок сообщения:  Re: Вращение камеры вокруг объекта и движение за ним

Я не очень понял твои сложные вычисления.
ИМХО надо скорее как-то так делать:
в LateUpdate: offset = transform.position - player.transform.position
в Update: transform.position = player.transform.position + offset

А еще лучше добавить камеру к другому объекту, пусть она всегда смотрит в точку 0,0 и двигается внутри: x=0, y=height, z=distance. И родительскому объекту ставить transform.position = player.transform.position, а rotation какой надо.

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/