Показаны сообщения с ярлыком код. Показать все сообщения
Показаны сообщения с ярлыком код. Показать все сообщения

четверг, 5 апреля 2012 г.

Мировые координаты в Экранные


var target : Transform;

function Update () {
    var screenPos : Vector3 = camera.WorldToScreenPoint (target.position);
    print ("target is " + screenPos.x + " pixels from the left");
}

Шейдеры

Шейдеры в Unity пишутся на специальном языке, который называется ShaderLab. Язык этот не сложный и в этой статье я его попытаюсь описать. Конечно большая часть этого урока – содержание справки Unity, но так как у многих проблемы с английским – этот урок будет полезным.

Кватернион


Что такое кватернион?

Кватернион представляет собой вращение на определенный угол вокруг произвольной оси. Любое вращение в Эйлеровом пространстве можно задать с помощью кватерниона.

В Unity3D вращения задаются в кватернионах (Quaternion) не смотря на то, что есть доступ к Эйлеровым углам. Эйлеровы углы вычисляются из кватерниона при чтении и из Эйлеровых углов создается кватернион при присвоении.

Экранные координаты в мировые

Для того чтоб определить объект в пространстве находящийся под курсором необходимо:
1. Перевести экранные координаты указателя (мыши) в луч с использованием метода камеры camera.ScreenPointToRay()
2. Пустить луч с помощью физики с использованием метода Physics.Raycast()
3. Если луч попал в какой-то объект (объект должен иметь коллайдер, чтобы в него можно было попасть лучем).
4. Обработать результат.

среда, 4 апреля 2012 г.

Lerp Slerp

Interpolates , Spherically interpolates between two vectors.


  1. var damping = 3.0;
  2. function Update ()
  3. {
  4.     transform.position = Vector3.Lerp(transform.position, target.position, Time.deltaTime * damping);   
  5.     transform.rotation = Quaternion.Slerp(transform.rotation, target.rotation, Time.deltaTime * damping);   
  6. }

Вращение камеры вокруг объекта


var target : Transform; //What to rotate around
var distance = 5.0; //How far away to orbit
var xSpeed = 125.0; //X sensitivity
var ySpeed = 50.0; //Y sensitivity

private var x = 0.0; //Angle of the y rotation?
private var y = 0.0; //Angle of the x rotation?

@script AddComponentMenu("Scripts/Mouse Orbit") //Add to menu

function Start() {Run this once at the start
    //Initialize the angles
    var angles = transform.eulerAngles;
    x = angles.y;
    y = angles.x;
}

function LateUpdate() { //Every frame, do this as late as you can
    if (target) {//There's a target
        //Change the angles by the mouse movement
        x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
        y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;

        //Rotate the camera to those angles 
        var rotation = Quaternion.Euler(y, x, 0);
        transform.rotation = rotation;

        //Move the camera to look at the target
        var position = rotation * Vector3(0.0, 0.0, -distance) + target.position;
        transform.position = position;
    }
}

Скриптовые события

При разработке на Unity3d часто необходимо привязать выполнение своих функций к конкретному событию. В Unity3d таких событий довольно большое количество, в данном разделе я постараюсь описать самые используемые из них.

Данная функция вызывается каждый раз перед отображением очередного кадра. Самая используемая для расчетов игровых параметров. Но категорически не рекомендуется использовать в ней расчет физических показателей.
Update()