Скрипт стыковки.

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

Скрипт стыковки.

Сообщение havismat 12 авг 2011, 23:54

Здравствуйте, возникла проблема с написанием скрипта стыковки. Ангар - параллелепипед без одной грани, по центру весит геймобжект с коллайдером выдвинутым немного вперед. Цель При влете корабля в зону тригерра он разворачивается лицом к центру ангара и на автопилоте влетает в центр ангара, после чего разворачивается лицом к выходу.

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

Вот код.
Скрипт Hangar включает стыковочный скрипт.
Синтаксис:
Используется javascript
static var target : GameObject;

function OnTriggerEnter (collision : Collider)  {
         
       
         target = collision.gameObject;
         gameObject.AddComponent(Dock);
       
}

function Update () {
}


 


Скрипт inOut - координаты входа.

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

static var inOut;



function start () {



 

        inOut = transform.position;



}

 



Сам стыковочный скрипт.

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

private var Starget : GameObject;

private var distance;

private var docked=0;

private var rotationSpeed = 10;

function FixedUpdate () {

       

        Starget = Hangar.target;

        if(Starget){

       

        distance = Vector3.Distance(transform.position,Starget.transform.position);

               

                if(!docked) {

                var relativePos = transform.position - Starget.transform.position;

                var rotation = Quaternion.LookRotation(relativePos);

                Starget.transform.rotation = rotation;

                Starget.transform.Translate(Vector3.forward*5*Time.deltaTime);

               
             }

       

                if(distance==0) {

                docked =1;

               

        }

       

        }

}



function OnTriggerStay (c : Collider) {



if(docked) {

                yield WaitForSeconds (5);

                Destroy (GetComponent (Dock));

}

if(distance==0) {

                opos= inOut.inOut;

                var backPos = opos-transform.position;

                var rotation_back = Quaternion.LookRotation(backPos);

                Starget.transform.rotation = rotation_back;

               
}


        }

 


Пожалуйста, подскажите, что я делаю не так, в каком направлении копать? Заранее благодарен.
havismat
UNец
 
Сообщения: 31
Зарегистрирован: 03 авг 2011, 16:13

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

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

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