Развитие игровой вспышки
Текущее время: Ср май 24, 2017 11:56 am

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Вращение камеры вокруг объекта и движение за ним
СообщениеДобавлено: Вт окт 20, 2015 1:46 pm 
Не в сети

Зарегистрирован: Пн сен 14, 2015 1:00 pm
Сообщений: 14
Нужно реализовать поворот вокруг объекта и следовать за ним, приведу ниже код . Проблема в том, что происходят какое-то дёрганье камеры, наверное связанные с позиционированием, но как их исправить не знаю( Скрипт работает так объект движется и камера за ним, все замечательно. Когда зажать правый клик происходит поворот вокруг него , как только я отпускаю клик камера дёргается в другую точку, происходит смещение (
Код:
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));
      }
   }


Вернуться наверх
 Профиль Отправить e-mail  
 
 Заголовок сообщения: Re: Вращение камеры вокруг объекта и движение за ним
СообщениеДобавлено: Ср окт 21, 2015 2:35 pm 
Не в сети
Аватар пользователя

Зарегистрирован: Ср авг 12, 2009 6:51 pm
Сообщений: 544
Откуда: Москва
Сайт: http://romamik.com
Я не очень понял твои сложные вычисления.
ИМХО надо скорее как-то так делать:
в 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 какой надо.


Вернуться наверх
 Профиль Отправить e-mail  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB