Модификация к MouseOrbit скрипту

Общие вопросы о Unity3D

Модификация к MouseOrbit скрипту

Сообщение Ashvar 17 янв 2012, 10:59

В MouseOrbit для определения поворота камеры используется не до конца понятная мне магия и направлением верха всегда остаётся одна и та же ось. Я бы хотел чтобы направление вверх бралось у объекта на который смотрят.
Первое что пришло в голову - сделать Look at с соответствующими параметрами - но при этом тряска появилась, результат недостаточной точности - не знаю даже где. В общем мой вопрос - как изменить скрипт, чтобы камера могла выбрать направление верха.
Ashvar
UNIт
 
Сообщения: 62
Зарегистрирован: 20 ноя 2011, 16:22

Re: Модификация к MouseOrbit скрипту

Сообщение Ashvar 18 янв 2012, 08:12

Ну или примерно сказать как примерно сделать, вот стандартный скрипт.

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

var xSpeed = 250.0;
var ySpeed = 120.0;

var yMinLimit = -20;
var yMaxLimit = 80;

private var x = 0.0;
private var y = 0.0;

@script AddComponentMenu("Camera-Control/Mouse Orbit")

function Start () {
    var angles = transform.eulerAngles;
    x = angles.y;
    y = angles.x;

    // Make the rigid body not change rotation
    if (rigidbody)
        rigidbody.freezeRotation = true;
}

function LateUpdate () {
    if (target) {
        x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
        y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;

        y = ClampAngle(y, yMinLimit, yMaxLimit);

        var rotation = Quaternion.Euler(y, x, 0);
        var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;

        transform.rotation = rotation;
        transform.position = position;
    }
}

static function ClampAngle (angle : float, min : float, max : float) {
    if (angle < -360)
        angle += 360;
    if (angle > 360)
        angle -= 360;
    return Mathf.Clamp (angle, min, max);
}
 


Ну или объясните почему верх привязан к оси y. Я вот из этого Quaternion.Euler(y, x, 0) не понимаю что выходит.
Последний раз редактировалось Ashvar 18 янв 2012, 11:23, всего редактировалось 1 раз.
Ashvar
UNIт
 
Сообщения: 62
Зарегистрирован: 20 ноя 2011, 16:22

Re: Модификация к MouseOrbit скрипту

Сообщение seaman 18 янв 2012, 08:14

Используйте теги форматирования,- иначе невозможно читать код.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Модификация к MouseOrbit скрипту

Сообщение Левш@ 18 янв 2012, 16:57

Ну или объясните почему верх привязан к оси y

Y - это не абсолютный верх, зависит от поворота обьекта.
А вот Vector3.up - это верх.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Модификация к MouseOrbit скрипту

Сообщение Ashvar 18 янв 2012, 21:20

В том то и дело!
Посмотрите как работает MouseOrbit. Верх там всегда остаётся верхом и вращение учитывается по двум осям. И работа MouseOrbit от поворота объекта не зависит вообще, а я бы хотел чтобы зависела. При том не от того объекта на который смотрю, а от другого.... сам вот думаю. Если Lookat использовать камера дёргается. Отчего такой эффект?
Ashvar
UNIт
 
Сообщения: 62
Зарегистрирован: 20 ноя 2011, 16:22


Вернуться в Общие вопросы

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

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