void FixedUpdate()              // このカメラ切り替えはFixedUpdate()内でないと正常に動かない
        {
            if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl) || flipCameraButton.GetButtonDown())
            {
                setCameraPositionFrontView();
            }
            else
            {
                setCameraPositionNormalView();
            }

            /*if (Input.GetButton ("Fire1")) {	// left Ctlr
             *                  // Change Front Camera
             *                  setCameraPositionFrontView ();
             *          } else if (Input.GetButton ("Fire2")) {	//Alt
             *                  // Change Jump Camera
             *                  setCameraPositionJumpView ();
             *          } else {
             *                  // return the camera to standard position and direction
             *                  setCameraPositionNormalView ();
             *          }*/
        }
        // 以下、メイン処理.リジッドボディと絡めるので、FixedUpdate内で処理を行う.
        void FixedUpdate()
        {
            float h = (Input.GetAxis("Horizontal") > 0 ? Input.GetAxis("Horizontal") : -Input.GetAxis("Horizontal")) > (joystick.GetAxis("Horizontal") > 0 ? joystick.GetAxis("Horizontal") : -joystick.GetAxis("Horizontal")) ? Input.GetAxis("Horizontal") : joystick.GetAxis("Horizontal"); // 入力デバイスの水平軸をhで定義
            float v = (Input.GetAxis("Vertical") > 0 ? Input.GetAxis("Vertical") : -Input.GetAxis("Vertical")) > (joystick.GetAxis("Vertical") > 0 ? joystick.GetAxis("Vertical") : -joystick.GetAxis("Vertical")) ? Input.GetAxis("Vertical") : joystick.GetAxis("Vertical");                 // 入力デバイスの垂直軸をvで定義

            anim.SetFloat("Speed", v);                                                                                                                                                                                                                                                         // Animator側で設定している"Speed"パラメタにvを渡す
            anim.SetFloat("Direction", h);                                                                                                                                                                                                                                                     // Animator側で設定している"Direction"パラメタにhを渡す
            anim.speed       = animSpeed;                                                                                                                                                                                                                                                      // Animatorのモーション再生速度に animSpeedを設定する
            currentBaseState = anim.GetCurrentAnimatorStateInfo(0);                                                                                                                                                                                                                            // 参照用のステート変数にBase Layer (0)の現在のステートを設定する
            rb.useGravity    = true;                                                                                                                                                                                                                                                           //ジャンプ中に重力を切るので、それ以外は重力の影響を受けるようにする



            // 以下、キャラクターの移動処理
            velocity = Vector3.forward * v;        // 上下のキー入力からZ軸方向の移動量を取得
                                                   // キャラクターのローカル空間での方向に変換
            velocity = transform.TransformDirection(velocity);
            //以下のvの閾値は、Mecanim側のトランジションと一緒に調整する
            if (v > 0.1)
            {
                velocity *= forwardSpeed;       // 移動速度を掛ける
            }
            else if (v < -0.1)
            {
                velocity *= backwardSpeed;  // 移動速度を掛ける
            }

            if (transform.parent.parent != null && (Input.GetButtonDown("Jump") || jumpButton.GetButtonDown()))    // スペースキーを入力したら

            //アニメーションのステートがLocomotionの最中のみジャンプできる
            {
                if (currentBaseState.fullPathHash == locoState)
                {
                    //ステート遷移中でなかったらジャンプできる
                    if (!anim.IsInTransition(0))
                    {
                        rb.velocity = Vector3.zero;
                        rb.AddForce(Vector3.up * jumpPower, ForceMode.VelocityChange);
                        anim.SetBool("Jump", true);     // Animatorにジャンプに切り替えるフラグを送る
                    }
                }
            }


            // 上下のキー入力でキャラクターを移動させる
            transform.localPosition += velocity * Time.fixedDeltaTime;

            // 左右のキー入力でキャラクタをY軸で旋回させる
            transform.Rotate(0, h * rotateSpeed, 0);


            // 以下、Animatorの各ステート中での処理
            // Locomotion中
            // 現在のベースレイヤーがlocoStateの時
            if (currentBaseState.fullPathHash == locoState)
            {
                //カーブでコライダ調整をしている時は、念のためにリセットする
                if (useCurves)
                {
                    resetCollider();
                }
            }
            // JUMP中の処理
            // 現在のベースレイヤーがjumpStateの時
            else if (currentBaseState.fullPathHash == jumpState)
            {
                cameraObject.SendMessage("setCameraPositionJumpView");  // ジャンプ中のカメラに変更
                                                                        // ステートがトランジション中でない場合
                if (!anim.IsInTransition(0))
                {
                    // 以下、カーブ調整をする場合の処理
                    if (useCurves)
                    {
                        // 以下JUMP00アニメーションについているカーブJumpHeightとGravityControl
                        // JumpHeight:JUMP00でのジャンプの高さ(0〜1)
                        // GravityControl:1⇒ジャンプ中(重力無効)、0⇒重力有効
                        float jumpHeight     = anim.GetFloat("JumpHeight");
                        float gravityControl = anim.GetFloat("GravityControl");
                        if (gravityControl > 0)
                        {
                            rb.useGravity = false;  //ジャンプ中の重力の影響を切る
                        }
                        // レイキャストをキャラクターのセンターから落とす
                        Ray        ray     = new Ray(transform.position + Vector3.up, -Vector3.up);
                        RaycastHit hitInfo = new RaycastHit();
                        // 高さが useCurvesHeight 以上ある時のみ、コライダーの高さと中心をJUMP00アニメーションについているカーブで調整する
                        if (Physics.Raycast(ray, out hitInfo))
                        {
                            if (hitInfo.distance > useCurvesHeight)
                            {
                                col.height = orgColHight - jumpHeight;      // 調整されたコライダーの高さ
                                float adjCenterY = orgVectColCenter.y + jumpHeight;
                                col.center = new Vector3(0, adjCenterY, 0); // 調整されたコライダーのセンター
                            }
                            else
                            {
                                // 閾値よりも低い時には初期値に戻す(念のため)
                                resetCollider();
                            }
                        }
                    }
                    // Jump bool値をリセットする(ループしないようにする)
                    anim.SetBool("Jump", false);
                }
            }
            // IDLE中の処理
            // 現在のベースレイヤーがidleStateの時
            else if (currentBaseState.fullPathHash == idleState)
            {
                //カーブでコライダ調整をしている時は、念のためにリセットする

                if (transform.parent.parent != null && (Input.GetButtonDown("Jump") || jumpButton.GetButtonDown()))
                {
                    if (!anim.IsInTransition(0))
                    {
                        rb.velocity = Vector3.zero;
                        rb.AddForce(Vector3.up * jumpPower, ForceMode.VelocityChange);
                        anim.SetBool("Rest", true);     // Animatorにジャンプに切り替えるフラグを送る
                    }
                }

                if (useCurves)
                {
                    resetCollider();
                }

                /*// スペースキーを入力したらRest状態になる
                 * if (Input.GetButtonDown("Jump")) {
                 *  anim.SetBool("Rest", true);
                 * }*/
            }
            // REST中の処理
            // 現在のベースレイヤーがrestStateの時
            else if (currentBaseState.fullPathHash == restState)
            {
                //cameraObject.SendMessage("setCameraPositionFrontView");		// カメラを正面に切り替える
                // ステートが遷移中でない場合、Rest bool値をリセットする(ループしないようにする)
                if (!anim.IsInTransition(0))
                {
                    anim.SetBool("Rest", false);
                }
            }
        }