float timer = 0; //経過時間 #endregion Fields #region Methods // Use this for initialization void Start() { ar = GameObject.Find ("ARDUINO").GetComponent<arduino> (); POS = transform.localPosition; //スタート位置保存 m_pos = POS; // m_pos.x += posX; //移動 m_pos.z += posY; //移動 m_pos.y += posZ; //移動 transform.localPosition = m_pos; //移動を反映 speed1 = new Vector3 (4.0f,0.0f,0.0f); //ウインチでの移動速度を決定 Debug.Log ("speed1="+speed1); speed2 = new Vector3 (0.0f, 0.0f, 2.5f); //登ってからスタート位置への移動速度を決定 Debug.Log ("speed2="+speed2); ar.setMode (-1); }
// 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); } } }