Beispiel #1
0
 // Update is used to set features regardless the active behaviour.
 void Update()
 {
     // Get jump input.
     if (!jump && Input.GetButtonDown(jumpButton) && behaviourManager.IsCurrentBehaviour(this.behaviourCode) && !behaviourManager.IsOverriding())
     {
         jump = true;
     }
 }
Beispiel #2
0
    // Update is used to set features regardless the active behaviour.
    void Update()
    {
        // Activate/deactivate aim by input.
        if (Input.GetAxisRaw(aimButton) != 0 && !aim)
        {
            StartCoroutine(ToggleAimOn());
        }
        else if (aim && Input.GetAxisRaw(aimButton) == 0)
        {
            StartCoroutine(ToggleAimOff());
        }

        // No sprinting while aiming.
        canSprint = !aim;

        // Toggle camera aim position left or right, switching shoulders.
        if (aim && Input.GetButtonDown(shoulderButton))
        {
            aimCamOffset.x   = aimCamOffset.x * (-1);
            aimPivotOffset.x = aimPivotOffset.x * (-1);
        }

        // Set aim boolean on the Animator Controller.
        behaviourManager.GetAnim.SetBool(aimBool, aim);

        // Weapon control
        if (weapon != null)
        {
            if (aim)
            {
                weapon.weaponAim(true);
            }
            else
            {
                weapon.weaponAim(false);
            }
            if (Input.GetButton("Fire1"))
            {
                weapon.Fire();
            }
        }
    }
Beispiel #3
0
    // Update is used to set features regardless the active behaviour.
    void Update()
    {
        // Toggle fly by input, only if there is no overriding state or temporary transitions.
        if (Input.GetButtonDown(flyButton) && !behaviourManager.IsOverriding() &&
            !behaviourManager.GetTempLockStatus(behaviourManager.GetDefaultBehaviour))
        {
            fly = !fly;

            // Force end jump transition.
            behaviourManager.UnlockTempBehaviour(behaviourManager.GetDefaultBehaviour);

            // Obey gravity. It's the law!
            behaviourManager.GetRigidBody.useGravity = !fly;

            // Player is flying.
            if (fly)
            {
                // Register this behaviour.
                behaviourManager.RegisterBehaviour(this.behaviourCode);
            }
            else
            {
                // Set collider direction to vertical.
                col.direction = 1;
                // Set camera default offset.
                behaviourManager.GetCamScript.ResetTargetOffsets();

                // Unregister this behaviour and set current behaviour to the default one.
                behaviourManager.UnregisterBehaviour(this.behaviourCode);
            }
        }

        // Assert this is the active behaviour
        fly = fly && behaviourManager.IsCurrentBehaviour(this.behaviourCode);

        // Set fly related variables on the Animator Controller.
        behaviourManager.GetAnim.SetBool(flyBool, fly);
    }
    // public GameObject Jumpmusic;
// 以下、メイン処理.リジッドボディと絡めるので、FixedUpdate内で処理を行う.
    void FixedUpdate()
    {
        float h = Input.GetAxis("Horizontal");                  // 入力デバイスの水平軸をhで定義
        float v = Input.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 = new Vector3(0, 0, v);                        // 上下のキー入力からZ軸方向の移動量を取得
        // キャラクターのローカル空間での方向に変換
        velocity = transform.TransformDirection(velocity);
        //以下のvの閾値は、Mecanim側のトランジションと一緒に調整する
        if (v > 0.1)
        {
            velocity *= forwardSpeed;                           // 移動速度を掛ける
        }
        else if (v < -0.1)
        {
            velocity *= backwardSpeed;                  // 移動速度を掛ける
        }

        if (Input.GetButtonDown("Jump"))                // スペースキーを入力したら
        // Instantiate(Jumpmusic, Vector2.zero, Quaternion.identity);
        //アニメーションのステートがLocomotionの最中のみジャンプできる
        {
            if (currentBaseState.nameHash == locoState)
            {
                //ステート遷移中でなかったらジャンプできる
                if (!anim.IsInTransition(0))
                {
                    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.nameHash == locoState)
        {
            //カーブでコライダ調整をしている時は、念のためにリセットする
            if (useCurves)
            {
                resetCollider();
            }
        }
        // JUMP中の処理
        // 現在のベースレイヤーがjumpStateの時
        else if (currentBaseState.nameHash == 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.nameHash == idleState)
        {
            //カーブでコライダ調整をしている時は、念のためにリセットする
            if (useCurves)
            {
                resetCollider();
            }
            // スペースキーを入力したらRest状態になる
            if (Input.GetButtonDown("Jump"))
            {
                anim.SetBool("Rest", true);
            }
        }
        // REST中の処理
        // 現在のベースレイヤーがrestStateの時
        else if (currentBaseState.nameHash == restState)
        {
            //cameraObject.SendMessage("setCameraPositionFrontView");		// カメラを正面に切り替える
            // ステートが遷移中でない場合、Rest bool値をリセットする(ループしないようにする)
            if (!anim.IsInTransition(0))
            {
                anim.SetBool("Rest", false);
            }
        }
    }