3D Interactive Presentation

Форум, посвящённый готовым проектам на базе Unity3D

Re: 3D Interactive Presentation

Сообщение sunseterry 18 авг 2012, 09:10

Очень понравилась презентация, хочу для своей модели сделать нечто похожее.

Автор, нужна помощь, как сделать такую же камеру, привязанную к обьекту? Чтобы перемещалась кнопкой мышки, а колесиком увеличивалась?
sunseterry
UNец
 
Сообщения: 3
Зарегистрирован: 16 авг 2012, 16:32

Re: 3D Interactive Presentation

Сообщение ascilograf 18 авг 2012, 10:45

Стандартные скрипты, MouseLook, перемещает камеру мышью, насчет увеличение масштаба не знаю правда, может или нет.
Находится в стандартном пакете CharacterController, нужно импортнуть в проект.
авось
Аватара пользователя
ascilograf
UNITрон
 
Сообщения: 226
Зарегистрирован: 21 апр 2012, 10:00
Откуда: Новокузнецк

Re: 3D Interactive Presentation

Сообщение sunseterry 18 авг 2012, 12:26

Есть два скрипта, впринципе, они меня оба устраивают, НО, знайний мне не хватает, не получается их обьединить, может кто откликнется, буду благодарен.

Первый, вращает камеру вокруг объекта:
Синтаксис:
Используется javascript
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);
}

 


Второй, увеличивает объект с помощью колесика:

Синтаксис:
Используется javascript
var speed = 4.0;
private var moveDirection = Vector3.zero;

function Update() {
my=moveDirection.y;
moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed+transform.position.y/5;
moveDirection.y=my;

transform.position -= transform.forward * -(Input.GetAxis("Mouse ScrollWheel"))* 10;

var controller : CharacterController = GetComponent(CharacterController);
var flags = controller.Move(moveDirection * Time.deltaTime);
}
sunseterry
UNец
 
Сообщения: 3
Зарегистрирован: 16 авг 2012, 16:32

Re: 3D Interactive Presentation

Сообщение wormik358 18 авг 2012, 18:41

слегка не понял 2 скрипт, но сделал по своему:


Синтаксис:
Используется 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 Update()
{
        if(Input.GetAxis("Mouse ScrollWheel") > 0)
        {
                target.localScale = new Vector3(target.localScale.x + 1, target.localScale.y + 1, target.localScale.z + 1);
        }
        if(Input.GetAxis("Mouse ScrollWheel") < 0 && (target.localScale.x >= 2))
        {
                target.localScale = new Vector3(target.localScale.x - 1, target.localScale.y - 1, target.localScale.z - 1);
        }
}

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);
}
Аватара пользователя
wormik358
UNIт
 
Сообщения: 127
Зарегистрирован: 19 июл 2011, 21:11

Re: 3D Interactive Presentation

Сообщение sunseterry 19 авг 2012, 07:05

Огромное спасибо за скрипт! все работает как и хотел, осталось еще только прикрутить левую кнопку мыши на вращение :)
sunseterry
UNец
 
Сообщения: 3
Зарегистрирован: 16 авг 2012, 16:32

Re: 3D Interactive Presentation

Сообщение wormik358 20 авг 2012, 15:56

sunseterry писал(а):Огромное спасибо за скрипт! все работает как и хотел, осталось еще только прикрутить левую кнопку мыши на вращение :)



ну я надеюсь, вы сами прикрутите левую кнопку мышки на вращение :)
Аватара пользователя
wormik358
UNIт
 
Сообщения: 127
Зарегистрирован: 19 июл 2011, 21:11

Пред.

Вернуться в Законченные проекты и Демо

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

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