Exemple #1
0
    // Update is called once per frame
    void Update()
    {
        try{
            if(mode < GLIDE)	//滑走より前の状態なら
                get = ar.getMode ();	//arduinoからの値取得
        }catch{	//arduinoのすくイプとを取得できていない
            Debug.Log ("errror Arduino");	//エラー表示
            ar = GetComponent<arduino> ();	//再度arduinoのスクリプトを取得
            get = mode;	//状態維持
        }

        //get = MOVE;

        //Debug.Log ("mode = " + mode);
        if (Input.GetKeyDown (KeyCode.S) && get ==0) {	//スタート待ち状態でSキーを押したら
            get = MOVE;	//arduinoからスタート信号を受け取った状態に
        }
        if (Input.GetKeyDown ("space")) {	//スペースキーが押されたら
            get=JUMP;	//arduinoからジャンプの信号を受け取った状態に
            Debug.Log ("jump");
        }
        //Debug.Log ("get=" + get + "move=" + mode);

        switch(get){
        case STOP:
            break;
        case MOVE:	//スタートの信号を受け取ったら
            if(mode == STOP){	//現在の状態がスタート待ち状態なら
                rb.AddForce(-100,0,0);	//初速として少し押し出す
                mode = MOVE;	//状態を滑走中に
                rb.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY;	//変な回転をしないように固定
                Planing_Clip.PlayOneShot (Planing);	//滑走音を再生
            }
            break;
        case JUMP:	//ジャンプする信号を受け取ったら
            if(mode == MOVE){	//今の状態が滑走中ならば
                //if(Input.GetKeyDown(KeyCode.Space)){
                Planing_Clip.Stop();	//滑走音を停止
                wind_Clip.Play ();	//風の音を再生
                se1_Clip.PlayOneShot (SE1);	//ジャンプ音を再生
                jumpFlg = true;		//ジャンプした
                mode = JUMP;	//状態をジャンプに
                Debug.Log ("JUMP!");
                rb.constraints = RigidbodyConstraints.FreezeRotationZ;
                /*
                if(ar.getData () < 100 )	//受け取ったジャンプの強さが一定以下なら
                    rb.AddForce(jumpPowerX,jumpPowerY,0.0f);	//最低の力でジャンプ
                else{
                    rb.AddForce(jumpPowerX,jumpPowerY*((float)ar.getData ()/100.0f),0.0f);	//ジャンプの強さを補正する
                }
                */
                int data = ar.getData ();
                float plus = jump*data;
                float minus = jump*data*-1;
                rb.AddForce(jumpPowerX+minus,jumpPowerY+plus,0.0f);	//ジャンプの強さを補正する
                ar.deleteBuffer();	//arduinoからあの値を消去
                mode = GLIDE;	//現在の状態を滑空中に
                get = GLIDE;	//
                ar.setMode (GLIDE);	//arduinoの状態を滑空中に
            }
            break;
        case GLIDE:	//滑空中の信号を受け取ったら
            if(mode == GLIDE){	//今の状態が滑空中なら
                //float data = (float)ar.getData();
                float data = ar.getData ();	//arduinoから値を取得
                //Debug.Log ("data + mode = "+data+get);

                if(Input.GetKey(KeyCode.A)){
                    data = 0.02f;	//
                }
                else if(Input.GetKey(KeyCode.D)){
                    data = -0.02f;
                }

                if(data>0){
                    //data = 1;
                    Debug.Log ("plus");
                }
                else if(data<0){
                    //data = -1;
                    Debug.Log ("minus");
                }
                else{
                    //data = 0;
                    Debug.Log ("center");
                }
                transform.Translate(0,0,-jumpYoko*data);
            }
            break;
        default:
            break;
        }
        if (mode == MOVE) {
            timer += Time.deltaTime;
            if( timer > 4.0f ){
                //Debug.Log ("planing");
                timer = 0.0f;
                Planing_Clip.PlayOneShot (Planing);
            }
        }
    }