Плавное движение камеры (Java) РЕШЕНО!

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Плавное движение камеры (Java) РЕШЕНО!

Сообщение mizoff 15 янв 2012, 22:52

Привет всем. Ребят не подскажите как можно сделать плавное перемещение камеры за объектом(от третьего лица). Собственно для космосима. то есть куда кораблик туда и камера, но плавно так. А то если просто перетащить камеру на объект получается жесткая привязка. Собственно нашел отличный пример реализации данной камеры. Вот - http://www.tasharen.com/sg/ К сожалению что бы скачать этот пример нужно заплатить. И код в нем на C#. Хотелось бы что то такое же но на Java.

Задача решена. Спасибо за подсказки! Выкладываю решение.

Синтаксис:
Используется javascript
//В target указываем обьект за которым следим, камеру привязываем к обьекту слежения.

//Сам скрипт кидаем на камеру. Пользуемся!



//---------------------------//

var target : Transform; // Указываем обьект контроля.

var smoothRotation = true; // Преключатель Включаем - Выключаем плавное слежение.

var rotationDamping = 10.0; //

//---------------------------//



function Update () {



//============================================================================================================

MousePosition = Input.mousePosition;

MousePosition.x = (Screen.height/2) - Input.mousePosition.y;    //=УПРАВЛЕНИЕ=

MousePosition.y = -(Screen.width/2) + Input.mousePosition.x;    //===МЫШЬЮ====

transform.Rotate(MousePosition * Time.deltaTime, Space.Self);   //============

//============================================================================================================



if (smoothRotation) {



var wantedRotation = Quaternion.LookRotation(target.position - transform.position, target.up);

        transform.rotation = Quaternion.Slerp (transform.rotation, wantedRotation, Time.deltaTime * rotationDamping);

}

    else transform.LookAt (target, target.up);

}
Последний раз редактировалось mizoff 16 янв 2012, 02:31, всего редактировалось 2 раз(а).
Космос - страсть. Сделать космосим - мечта. Unity3D - Мечты сбываются. :)
Аватара пользователя
mizoff
UNIт
 
Сообщения: 54
Зарегистрирован: 02 дек 2011, 10:29
Откуда: Россия
  • Сайт
  • ICQ

Re: Плавное движение камеры (Java)

Сообщение DbIMok 15 янв 2012, 23:24

правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Плавное движение камеры (Java)

Сообщение mizoff 16 янв 2012, 00:29

Попробовал предложенный пример. Он отлично подходит по поведению. Но у меня возникла проблема. Камера дергается ужасно. Никак не могу понять в чем дело. Выкладываю скрипт камеры и контролера управления. Посмотрите пожалуйста что может с чем конфликтовать...

Синтаксис:
Используется javascript
var target : Transform;

var distance = 3.0;

var height = 3.0;

var damping = 5.0;

var smoothRotation = true;

var rotationDamping = 10.0;



function Update () {

    var wantedPosition = target.TransformPoint(0, height, -distance);

    transform.position = Vector3.Lerp (transform.position, wantedPosition, Time.deltaTime * damping);



    if (smoothRotation) {

        var wantedRotation = Quaternion.LookRotation(target.position - transform.position, target.up);

        transform.rotation = Quaternion.Slerp (transform.rotation, wantedRotation, Time.deltaTime * rotationDamping);

    }



    else transform.LookAt (target, target.up);

}


Собственно это скрипт камеры.

А вот контроллер:

Синтаксис:
Используется javascript
var moving : Transform;         //Указываеться обьект контроля
var rSpeed = 1.0;                       //Скорость вращения
var movSpeed = 0.0;                     //Переменная скорости
var maxMovSpeed = 200.0;        //Максимальная скорость движения
var forceSpeed = 0.0;
var forceSpeedUscor = 10.0;
var forceSpeedUscorRev = 10.0;
var MaxForceSpeed = 200.0;
var uskorMov = 0.05;            //Коифицент ускорения
var orderMov = 0.0;                     //Обратная тяга
var limitToplivo = 1.0;         //Топливо (если ноль движение останавливаеться)
var ZrotSpeedLeft = 0.05;       //Скорость крена по Z
var ZrotSpeedRight = -0.05;     //Скорость крена по Z
var ZrotSpeedUscor = 0.005;     //Cкорость ускорения по Z
var ZrotMaxSpeed = 0.5;         //Максимальая скорость по Z
var sensSpeed = 0.002;  //Не задействованно пока
function Update () {

//============================================================================================================
MousePosition = Input.mousePosition;
MousePosition.x = (Screen.height/2) - Input.mousePosition.y;    //=УПРАВЛЕНИЕ=
MousePosition.y = -(Screen.width/2) + Input.mousePosition.x;    //===МЫШЬЮ====
transform.Rotate(MousePosition * Time.deltaTime, Space.Self);   //============
//============================================================================================================

var moveDirection = new Vector3(0, 0, 1);                                               //вычисляем новое направление
        moveDirection = transform.TransformDirection(moveDirection);                    //находим Forward
        moveDirection *= movSpeed;                                                      //применяем скорость
var controller : CharacterController = GetComponent(CharacterController);       //Подкючаем CharacterController
var flags = controller.Move(moveDirection * Time.deltaTime);

//=============================================================================================================

if (Input.GetKey ("a") && (orderMov == 0.0 || orderMov == 1.0) && limitToplivo > 0.0) {
                                                orderMov = 1.0;
                                                MousePosition.z = -(Screen.height/2) + Input.mousePosition.x;
                                                transform.Rotate(MousePosition, ZrotSpeedLeft, Space.Self);
                                                if (ZrotSpeedLeft < ZrotMaxSpeed)
                                                ZrotSpeedLeft += ZrotSpeedUscor;
                                                }
                                                else if (orderMov == 1.0) {
                                                if (ZrotSpeedLeft > 0.0)
                                                ZrotSpeedLeft -= ZrotSpeedUscor;
                                                if (ZrotSpeedLeft > 0.0) {
                                                MousePosition.z = -(Screen.height/2) + Input.mousePosition.x;
                                                transform.Rotate(MousePosition, ZrotSpeedLeft, Space.Self);
                                               
}
}

if (Input.GetKey ("d") && (orderMov == 0.0 || orderMov == 1.0) && limitToplivo > 0.0) {
                                                orderMov = 1.0;
                                                MousePosition.z = (Screen.height/2) + Input.mousePosition.x;
                                                transform.Rotate(MousePosition, ZrotSpeedRight, Space.Self);
                                                if (ZrotSpeedRight > -ZrotMaxSpeed)
                                                ZrotSpeedRight -= ZrotSpeedUscor;
                                                }
                                                else if (orderMov == 1.0) {
                                                if (ZrotSpeedRight < 0.0)
                                                ZrotSpeedRight += ZrotSpeedUscor;
                                                if (ZrotSpeedRight < 0.0) {
                                                MousePosition.z = (Screen.height/2) + Input.mousePosition.x;
                                                transform.Rotate(MousePosition, ZrotSpeedRight, Space.Self);
                                               
}
}

//=============================================================================================================

 if (Input.GetKey ("w") && (orderMov == 0 || orderMov == 1) && limitToplivo > 0) {
                        orderMov = 1;
                if (movSpeed < maxMovSpeed)
                    movSpeed += uskorMov;
                    if (movSpeed > maxMovSpeed / 20)
                    movSpeed = maxMovSpeed / 20;
                    if (movSpeed == maxMovSpeed / 20)
                    movSpeed += forceSpeedUscor * 2;
        }
        else if (orderMov == 1) {
            if (movSpeed > 0)
                        movSpeed -= uskorMov;
                if (movSpeed < 0) {
                        movSpeed = 0;
                    orderMov = 0;
                }
               
        }
 if (Input.GetKey ("s") && (orderMov == 0 || orderMov == 2) && limitToplivo > 0) {
                         orderMov = 2;
                if (movSpeed > -maxMovSpeed)
                    movSpeed -= uskorMov;
                    if (movSpeed < -maxMovSpeed / 40)
                    movSpeed = -maxMovSpeed / 40;
        }
        else if (orderMov == 2) {
            if (movSpeed < 0)
                        movSpeed += uskorMov;
                if (movSpeed > 0) {
                        movSpeed = 0;
                    orderMov = 0;
                }
        }
       
//=============================================================================================================                                                      
}


Заранее благодарен!
Космос - страсть. Сделать космосим - мечта. Unity3D - Мечты сбываются. :)
Аватара пользователя
mizoff
UNIт
 
Сообщения: 54
Зарегистрирован: 02 дек 2011, 10:29
Откуда: Россия
  • Сайт
  • ICQ

Re: Плавное движение камеры (Java)

Сообщение mizoff 16 янв 2012, 02:27

Все решил! Вообщем как оказалось решение под носом :) Взял код из контроллера и немного доработал взяв из приведенного примера. Теперь камера плавно следит за объектом.

Собственно решение вот:

Синтаксис:
Используется javascript
//В target указываем обьект за которым следим, камеру привязываем к обьекту слежения.

//Сам скрипт кидаем на камеру. Пользуемся!



//---------------------------//

var target : Transform; // Указываем обьект контроля.

var smoothRotation = true; // Преключатель Включаем - Выключаем плавное слежение.

var rotationDamping = 10.0; //

//---------------------------//



function Update () {



//============================================================================================================

MousePosition = Input.mousePosition;

MousePosition.x = (Screen.height/2) - Input.mousePosition.y;    //=УПРАВЛЕНИЕ=

MousePosition.y = -(Screen.width/2) + Input.mousePosition.x;    //===МЫШЬЮ====

transform.Rotate(MousePosition * Time.deltaTime, Space.Self);   //============

//============================================================================================================



if (smoothRotation) {



var wantedRotation = Quaternion.LookRotation(target.position - transform.position, target.up);

        transform.rotation = Quaternion.Slerp (transform.rotation, wantedRotation, Time.deltaTime * rotationDamping);

}

    else transform.LookAt (target, target.up);

}
Космос - страсть. Сделать космосим - мечта. Unity3D - Мечты сбываются. :)
Аватара пользователя
mizoff
UNIт
 
Сообщения: 54
Зарегистрирован: 02 дек 2011, 10:29
Откуда: Россия
  • Сайт
  • ICQ


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 24