Ship Mouse Control(РЕШЕНО)

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

Ship Mouse Control(РЕШЕНО)

Сообщение frost 31 янв 2012, 17:01

Здравствуйте. Нужна помощь вот в таком вопросе, есть скрипт, управление заточено на клавиши, как при минимальных потерях изменить управление с клавиш на мышь? (то есть куда мышь смотрит, туда направлен нос корабля в моем случае)
Синтаксис:
Используется javascript
// Rotaton and position of drone
static var rotationx=0;
static var rotationy:float =0.0;
static var rotationz:float =0.0;
var positionx: float=0.0;
static var positiony: float=0.0;
var positionz: float=0.0;

static var speed:float =0.0;// speed variable
var uplift:float =0.0;// Uplift to take off
var pseudogravitation:float=0.0; // downlift

var rightleftsoft:float=0.0;
var rightleftsoftabs:float=0.0;

var divesalto:float =0.0;
var diveblocker:float=0.0;


function Update () {

       
        // Up Down, limited to a minimum speed
                if ((Input.GetAxis("Vertical")<=0)&&((speed>595))) {
                        transform.Rotate((Input.GetAxis("Vertical")*Time.deltaTime*80),0,0);
                }
                if ((Input.GetAxis("Vertical")>0)&&((speed>595))){
                        transform.Rotate((0.8-divesalto)*(Input.GetAxis("Vertical")*Time.deltaTime*80),0,0);
                }
               
        // Left Right at the ground    
                if (groundtrigger.triggered==1) transform.Rotate(0,Input.GetAxis("Horizontal")*Time.deltaTime*30,0,Space.World);
        // Left Right in the air
                if (groundtrigger.triggered==0) transform.Rotate(0,Time.deltaTime*100*rightleftsoft,0,Space.World);
               
        // Tilt just in the air
                if ((groundtrigger.triggered==0)) transform.Rotate(0,0,Time.deltaTime*100*(1.0-rightleftsoftabs-diveblocker)*Input.GetAxis("Horizontal")*-1.0);                

               
                //Soft rotation calculation
                if ((Input.GetAxis ("Horizontal")<=0)&&(rotationz >0)&&(rotationz <90)) rightleftsoft=rotationz*2.2/100*-1;//linksrum || to the left
                if ((Input.GetAxis ("Horizontal")>=0)&&(rotationz >270)) rightleftsoft=(7.92-rotationz*2.2/100);//rechtsrum ||to the right
               
                if (rightleftsoft>1) rightleftsoft =1;
                if (rightleftsoft<-1) rightleftsoft =-1;
               
                if ((rightleftsoft>-0.01) && (rightleftsoft<0.01)) rightleftsoft=0;

                rightleftsoftabs=Mathf.Abs(rightleftsoft);
               

                if (rotationx < 90) divesalto=rotationx/100.0;
                if (rotationx > 90) divesalto=-0.2;
               
                if (rotationx <90) diveblocker=rotationx/200.0;
                else diveblocker=0;

               
                //  rotateback when key wrong direction
                if ((rotationz <180)&&(Input.GetAxis ("Horizontal")>0)) transform.Rotate(0,0,rightleftsoft*Time.deltaTime*80);
                if ((rotationz >180)&&(Input.GetAxis ("Horizontal")<0)) transform.Rotate(0,0,rightleftsoft*Time.deltaTime*80);

                //Rotate back in z axis general
                if (!Input.GetButton ("Horizontal")){
                        if ((rotationz < 135)) transform.Rotate(0,0,rightleftsoftabs*Time.deltaTime*-100);
                        if ((rotationz > 225)) transform.Rotate(0,0,rightleftsoftabs*Time.deltaTime*100);
                        }
                       
                // Rotate back X axis
                if ((!Input.GetButton ("Vertical"))&&(groundtrigger.triggered==0)){
                        if ((rotationx >0)&&(rotationx < 180)) transform.Rotate(Time.deltaTime*-50,0,0);
                        if ((rotationx >0)&&(rotationx > 180)) transform.Rotate(Time.deltaTime*50,0,0);
                        }
                       
               
                // Speed
                transform.Translate(0,0,speed/20*Time.deltaTime);
               
       
                //  Input Accellerate and deccellerate at ground
                if ((groundtrigger.triggered==1)&&(Input.GetButton("Fire1"))&&(speed<800)) speed+=Time.deltaTime*240;
                if ((groundtrigger.triggered==1)&&(Input.GetButton("Fire2"))&&(speed>0)) speed-=Time.deltaTime*240;
               
                                // Input Accellerate and deccellerate in the air
                if ((groundtrigger.triggered==0)&&(Input.GetButton("Fire1"))&&(speed<800)) speed+=Time.deltaTime*240;
                if ((groundtrigger.triggered==0)&&(Input.GetButton("Fire2"))&&(speed>600)) speed-=Time.deltaTime*240;
               
                if (speed<0) speed=0;
                                                                                       
                if ((groundtrigger.triggered==0)&&(!Input.GetButton("Fire1"))&&(!Input.GetButton("Fire2"))&&(speed>695)&&(speed<705)) speed=700;
               
               
                //This code resets the speed to 700 when there is no acceleration or deccelleration. Maximum 800, minimum 600
                if((Input.GetButton("Fire1")==false)&&(Input.GetButton("Fire2")==false)&&(speed>595)&&(speed<700)) speed+=Time.deltaTime*240.0;
                if((Input.GetButton("Fire1")==false)&&(Input.GetButton("Fire2")==false)&&(speed>595)&&(speed>700)) speed-=Time.deltaTime*240.0;
               
                //uplift
                transform.Translate(0,uplift*Time.deltaTime/10.0,0);
                               
                uplift = -700+speed;
               
                if ((groundtrigger.triggered==1)&&(uplift < 0)) uplift=0;
       

        if (transform.position.x >= 900.0) transform.position.x = 0;
        else if (transform.position.x <= -900.0) transform.position.x = 900.0;
        else if (transform.position.z >= 900.0) transform.position.z = 0;
        else if (transform.position.z <= -900.0) transform.position.z = 900.0;
       
        if (positiony > 1000) transform.position.y = 1000;

}
 
Последний раз редактировалось frost 01 фев 2012, 16:27, всего редактировалось 1 раз.
Воистину удивителен ребенка разум.
Аватара пользователя
frost
UNITрон
 
Сообщения: 202
Зарегистрирован: 10 дек 2010, 15:46
Откуда: Luksemburg
  • ICQ

Re: Ship Mouse Control

Сообщение Acrobat 01 фев 2012, 11:36

У Вас походу с производительностью будут большие проблемы. Код надо оптимизировать. В логику я не залазил, но много чего исправить нужно будет точно.
Acrobat
UNITрон
 
Сообщения: 182
Зарегистрирован: 08 дек 2011, 16:16
Откуда: г. Нижний Новгород

Re: Ship Mouse Control

Сообщение frost 01 фев 2012, 16:27

Да, код засорен. Переписал все заново. И решил свою проблему сам.
Воистину удивителен ребенка разум.
Аватара пользователя
frost
UNITрон
 
Сообщения: 202
Зарегистрирован: 10 дек 2010, 15:46
Откуда: Luksemburg
  • ICQ


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

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

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