Пятница, 22 Ноября 2024, 01:12

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Поворот камеры
GreexonДата: Четверг, 07 Августа 2014, 15:40 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Здравствуйте, есть проблема с возвращением камеры в оригинальное положение через определённый период времени.
Скрипт поворота камеры вокруг объекта:

Помогите реализовать в скрипте возврат камеры в начальное положение через определённое время (при условии что её не вращают).
MANMANAДата: Четверг, 07 Августа 2014, 16:30 | Сообщение # 2
почти ветеран
Сейчас нет на сайте
запомни ее начальное положение через transform.position и возвращай в это положение
либо кватернион запомни и через Slerp для плавного возврата


http://www.3dbuffer.com/ Текстуры, Unity3D, Blender: Эффекты, скрипты, моделирование, текстурирование, скульптинг
VKонтакте 3Dbuffer

Последнее:

Новый раздел "Текстуры"

Как запатентовать, защитить техническое решение, игру, идею
GreexonДата: Четверг, 07 Августа 2014, 16:33 | Сообщение # 3
почетный гость
Сейчас нет на сайте
А если камера закреплена за игроком то это будет работать?
allodsДата: Четверг, 07 Августа 2014, 18:01 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
запомни не локальную позицию а мировую
GreexonДата: Четверг, 07 Августа 2014, 18:45 | Сообщение # 5
почетный гость
Сейчас нет на сайте
Цитата allods ()
запомни не локальную позицию а мировую

Зачем мне мировая? Мне нужно что бы камера возвращалась за спину персонажа.
allodsДата: Четверг, 07 Августа 2014, 20:54 | Сообщение # 6
почти ветеран
Сейчас нет на сайте
тогда повесь пустышку за спину персонажа и возвращай к ней камеру
berilДата: Четверг, 07 Августа 2014, 21:00 | Сообщение # 7
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Посмотри эту камеру

Код

using UnityEngine;
using System.Collections;

/// ГЛАВНАЯ КАМЕРА
/// Описание:
/// Камера следит за игроком.
/// Местоположение камеры фиксированое и изменять его нельзя
/// Но возможно вращение по оси Х при зажатии колесика мыши.
/// При этом после того как колесико будет отпущено, камера  
/// вернется в свое изначально местоположение
///
public class GeneralCamera : MonoBehaviour
{

     public GameObject Target; //цель камеры
     public float MaxDistance;//максимальная дистанция
     public float MinDistance;//минимальная дистанция приближения камеры
     public float Height;//высота расположения камеры относительно модели
     public float XSpeed = 250;//скоро поворота
     public float YSpeed = 120;//
     public bool CameraRotation;//возможно ли изменения позиции камеры
     public float HeightDamping = 2f;//высота торможения
     public float RotationDamping = 3f;//скорость торможения при вращении

     Transform localTrans;
     float x;
     float y;

     void Awake()
     {
         localTrans = transform;//кешируем переменную

         Target = GameObject.FindGameObjectWithTag(ManagerTag.CAMERA_TARGET);//присваиваем значение
     }

     void Start()
     {
         if (Target == null)
             Debug.LogError("Не указана цель камеры");
         else
             StartCameraPosition();
     }

     void Update()
     {
         //если нажата кнопка мышки, камеру можно вращать
         if (Input.GetButtonDown("Rotate mouse button"))
         {
             CameraRotation = true;
         }

         if (Input.GetButtonUp("Rotate mouse button"))
         {
             CameraRotation = false;
             x = 0;
             y = 0;  
         }
     }

     void LateUpdate()
     {
         if (CameraRotation)
         {
             //используем параметры Input
             x += Input.GetAxis("Mouse X") * XSpeed * 0.02f;
             y -= Input.GetAxis("Mouse Y") * YSpeed * 0.02f;

             cameraRotate();
         }
         else
         {
             // Вычесляем текущие углы
             
             float wantedRotationAngle = Target.transform.eulerAngles.y;
             float wantedHeight = Target.transform.position.y + Height;

             float currentRotationAngle = transform.eulerAngles.y;
             float currentHeight = transform.position.y;

             // Демпфировать вращение вокруг y-axis.
             currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, wantedRotationAngle, RotationDamping * Time.deltaTime);

             // Демпфировать высоту
             currentHeight = Mathf.Lerp(currentHeight, wantedHeight, HeightDamping * Time.deltaTime);

             // Преобразовуем угол в rotation
             Quaternion currentRotation = Quaternion.Euler(0, currentRotationAngle, 0);

             // Устанавливаем позицию камеры на x-z координатах
             transform.position = Target.transform.position;
             transform.position -= currentRotation * Vector3.forward * MaxDistance;

             // Высота камеры          
             localTrans.LookAt(Target.transform);
         }

     }

     ///метод в котором расчитываем поворот камеры
     void cameraRotate()
     {
         Quaternion rotate = Quaternion.Euler(y, x, 0);

         var posit = rotate * new Vector3(0, 0, -MaxDistance) + Target.transform.position;

         localTrans.rotation = rotate;
         localTrans.position = posit;
     }

     ///метод отвечающий за установку камеры на стартовую позицию
     public void StartCameraPosition()
     {
         localTrans.position = new Vector3(Target.transform.position.x, Target.transform.position.y - Height, Target.transform.position.z - MaxDistance);

         localTrans.LookAt(Target.transform);
     }

}




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
GreexonДата: Пятница, 08 Августа 2014, 12:25 | Сообщение # 8
почетный гость
Сейчас нет на сайте
Спасибо всем, очень помогли.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг