예제 #1
0
    void FixedUpdate()
    {
        IsInWater = (Support.GetColliderHitInfoList(GetComponent <Collider>(), Vector3.zero, LayerMask.GetMask("WaterArea")).Count > 0);

        // 水中/水上の挙動
        if (IsInWater)
        {
            // 水中なら
            if (!IsWaterSurface)
            {
                // 水による浮上
                MoveMng.AddMove(new Vector3(0.0f, waterFloatSpd[(int)WeightMng.WeightLv], 0.0f));
            }
            // 水上なら
            else
            {
                // 重さに変化が無ければ
                if (WeightMng.WeightLv == WeightManager.Weight.light)
                {
                    // 落下しない
                    MoveMng.StopMoveVirtical(MoveManager.MoveType.gravity);
                    MoveMng.StopMoveVirtical(MoveManager.MoveType.prevMove);
                }
                // 重さが変化していれば
                else
                {
                    // 水面状態を解除
                    IsWaterSurface = false;
                }
            }
        }
    }
예제 #2
0
    void HandSpringJump()
    {
        // 前回までの上下方向の加速度を削除
        MoveMng.StopMoveVirtical(MoveManager.MoveType.prevMove);

        // 左右方向の移動量をジャンプ中速度まで下げる
        MoveMng.PrevMove = new Vector3(Mathf.Sign(MoveMng.PrevMove.x) * Mathf.Clamp(MoveMng.PrevMove.x, -JumpSpd, JumpSpd), MoveMng.PrevMove.y, MoveMng.PrevMove.z);

        // 離地方向に跳ねる
        if (!WaterStt.IsInWater)
        {
            MoveMng.AddMove(new Vector3(0.0f, (HandSpringJumpHeight) * -(RotVec.y * 2.0f - 1.0f), 0.0f));
        }
        else
        {
            MoveMng.AddMove(new Vector3(0.0f, (HandSpringJumpHeightInWater) * -(RotVec.y * 2.0f - 1.0f), 0.0f));
        }

        // 離地
        Land.IsLanding          = false;
        WaterStt.IsWaterSurface = false;
        WaterStt.BeginWaterStopIgnore();

        // サウンド再生
        SoundManager.SPlay(handSpringJumpSE, handSpringJumpSEDeray);
    }
예제 #3
0
    void Walk()
    {
        // 歩行アニメーション
        if ((walkStandbyVec != 0.0f) && CanWalk)
        {
            if (!Lift.IsLifting)
            {
                PlAnim.StartWalk();
            }
            else
            {
                PlAnim.StartHoldWalk();
            }
            PlAnim.SetSpeed(Mathf.Abs(walkStandbyVec));
        }
        // 待機アニメーション
        else
        {
            if (!Lift.IsLifting)
            {
                PlAnim.StartStandBy();
            }
            else
            {
                PlAnim.StartHoldStandBy();
            }
        }

        // 左右移動入力があれば
        if (walkStandbyVec == 0.0f)
        {
            return;
        }

        // 左右移動可能でなければ
        if (!canWalk)
        {
            return;
        }

        // 地上なら
        if (Land.IsLanding)
        {
            // 左右方向へ加速
            MoveMng.AddMove(new Vector3(walkStandbyVec * walkSpd, 0.0f, 0.0f));
        }
        // 空中なら
        else
        {
            // 左右方向へ加速
            MoveMng.AddMove(new Vector3(walkStandbyVec * (JumpDis / JumpTime) * Time.fixedDeltaTime, 0.0f, 0.0f));
        }
    }
예제 #4
0
    void WalkDown()
    {
        // 接地中でなく、水上で安定状態もなければ
        if (!Land.IsLanding && !WaterStt.IsWaterSurface)
        {
            return;
        }

        // 進行方向側への左右入力があれば
        if ((walkStandbyVec != 0.0f) && (Mathf.Sign(MoveMng.PrevMove.x) == Mathf.Sign(walkStandbyVec)))
        {
            return;
        }

        // 減速
        float moveX = (Mathf.Min((walkSpd / walkStopTime), Mathf.Abs(MoveMng.PrevMove.x))) * -Mathf.Sign(MoveMng.PrevMove.x);

        MoveMng.AddMove(new Vector3(moveX, 0.0f, 0.0f));
    }
예제 #5
0
    void WalkDown()
    {
        // 進行方向側への左右入力があるか、接地した際の天井回転待ち状態なら
        if (((walkStandbyVec != 0.0f) && (Mathf.Sign(MoveMng.PrevMove.x) == Mathf.Sign(walkStandbyVec))) && !IsHandSpringWeit)
        {
            return;
        }

        // 接地中、または水上での安定状態、安定状態オブジェクトへの接地であれば
        if (Land.IsLanding || WaterStt.IsWaterSurface || Land.IsWaterFloatLanding)
        {
            // 減速
            float moveX = (Mathf.Min((WalkSpd / WalkStop), Mathf.Abs(MoveMng.PrevMove.x))) * -Mathf.Sign(MoveMng.PrevMove.x);
            MoveMng.AddMove(new Vector3(moveX, 0.0f, 0.0f));
        }
        // 空中であれば
        else if (!WaterStt.IsInWater && !WaterStt.IsWaterSurface)
        {
            // 空中での減速
            float moveX = (Mathf.Min((JumpSpd / JumpStop), Mathf.Abs(MoveMng.PrevMove.x))) * -Mathf.Sign(MoveMng.PrevMove.x);
            MoveMng.AddMove(new Vector3(moveX, 0.0f, 0.0f));
        }
    }
예제 #6
0
    void FixedUpdate()
    {
        List <RaycastHit> waterAreaList = Support.GetColliderHitInfoList(waterCol, Vector3.zero, LayerMask.GetMask("WaterArea"));

        if (waterAreaList.Count > 0)
        {
            // 入った水エリアを保持する
            float nearDis = float.MaxValue;
            foreach (var waterArea in waterAreaList)
            {
                BoxCollider waterBox = waterArea.transform.GetComponent <BoxCollider>();
                float       cmpDis   = Mathf.Abs((waterBox.bounds.center.y + waterBox.bounds.size.y * 0.5f) - (waterCol.bounds.center.y));
                if (cmpDis < nearDis)
                {
                    nearDis    = cmpDis;
                    inWaterCol = waterBox;
                }
            }
            IsInWater = true;
        }
        else
        {
            IsInWater = false;
        }

        // 水中なら
        if (isInWater && !IsWaterSurface)
        {
            if (CanFloat)
            {
//				// 押し付けられていない場合
//				if (!(Land && Land.IsExtrusionLanding)) {
                // 水による浮上
                //Debug.LogWarning("waterfloat");
                MoveMng.AddMove(new Vector3(0.0f, waterFloatSpd[(int)WeightMng.WeightLv], 0.0f), MoveManager.MoveType.waterFloat);
//				}
                // 自身が宙に浮く重さであり、水上に浮く以上の重さのオブジェクトに抑えられている場合
                if ((WeightMng.WeightLv == WeightManager.Weight.flying) && (WeightMng.PileMaxWeightLv >= WeightManager.Weight.light))
                {
                    // 重力による移動と前回の移動量をなくす
                    MoveMng.StopMoveVirtical(MoveManager.MoveType.gravity);
                    MoveMng.StopMoveVirtical(MoveManager.MoveType.prevMove);
                }
            }
        }
        // 水上なら
        else if (IsWaterSurface)
        {
            // 重さや位置に変化が無ければ
            if ((WeightMng.WeightLv == WeightManager.Weight.light) && (transform.position.y == prevHeight) && (WeightMng.PileMaxWeightLv != WeightManager.Weight.heavy))
            {
                // 落下しない
                MoveMng.StopMoveVirtical(MoveManager.MoveType.gravity);
                MoveMng.StopMoveVirtical(MoveManager.MoveType.prevMove);
                MoveMng.StopMoveVirtical(MoveManager.MoveType.waterFloat);
            }
            // 重さや位置が変化していれば
            else
            {
                // 水面状態を解除
                IsWaterSurface = false;

                // 上に乗っているオブジェクトに沈められた場合
                if (WeightMng.PileMaxWeightLv == WeightManager.Weight.heavy)
                {
                    // 下方向への移動が続く限り、水面状態にならない
                    IsSubmerge = true;
                }
            }
        }

        // 上に乗っているオブジェクトに沈められた後、上方向に移動していれば
        if (IsSubmerge && MoveMng.PrevMove.y > 0.0f)
        {
            // 沈められていない
            IsSubmerge = false;
        }
    }
예제 #7
0
    void Walk()
    {
        prevIsWaterSurfaceStandby = IsWaterSurfaceStandby;
        prevIsWaterSurfaceSwiming = IsWaterSurfaceSwiming;
        IsWaterSurfaceStandby     = false;
        IsWaterSurfaceSwiming     = false;

        // 持ち下ろしアニメーション中、または天井回転待ち中であれば処理しない
        if (Lift.IsLiftCantMove || IsHandSpringWeit)
        {
            return;
        }

        // 重さ0のプレイヤーが重さ2の持ち上げオブジェクトを離す時の回転中も処理しない
        if (isHeavyReleaseRotate)
        {
            return;
        }

        // 歩行アニメーション
        if ((walkStandbyVec != 0.0f) && CanWalk)
        {
            if (!WaterStt.IsWaterSurface)
            {
                if (Land.IsLanding || Land.IsExtrusionLanding || Land.IsWaterFloatLanding)
                {
                    if (!Lift.IsLifting)
                    {
                        PlAnim.StartWalk();
                    }
                    else
                    {
                        PlAnim.StartHoldWalk();
                    }
                }
                float walkAnimSpd = Mathf.Max((Mathf.Abs(MoveMng.PrevMove.x) * walkAnimRatio), walkAnimMinSpd);
                //float walkAnimSpd = (walkStandbyVec * walkAnimRatio);
                PlAnim.SetSpeed(walkAnimSpd);
            }
            // 泳ぎアニメーション
            else
            {
                IsWaterSurfaceSwiming = true;
                if (IsWaterSurfaceSwiming && !prevIsWaterSurfaceSwiming)
                {
                    if (!Lift.IsLifting)
                    {
                        PlAnim.StartSwim();
                    }
                    else
                    {
                        PlAnim.StartHoldSwim();
                    }
                }
            }
        }
        // 待機アニメーション
        else
        {
            if (!WaterStt.IsWaterSurface)
            {
                if (!Lift.IsLifting)
                {
                    PlAnim.StartStandBy();
                }
                else
                {
                    PlAnim.StartHoldStandBy();
                }
            }
            else
            {
                IsWaterSurfaceStandby = true;
                if (IsWaterSurfaceStandby && !prevIsWaterSurfaceStandby)
                {
                    if (!Lift.IsLifting)
                    {
                        PlAnim.StartWaterStandBy();
                    }
                    else
                    {
                        PlAnim.StartHoldWaterStandBy();
                    }
                }
            }
        }

        // 左右移動入力があれば
        if (walkStandbyVec == 0.0f)
        {
            return;
        }

        // 左右移動可能でなければ
        if (!canWalk)
        {
            return;
        }

        // 地上なら
        if (Land.IsLanding)
        {
            // 左右方向へ加速
            MoveMng.AddMove(new Vector3(walkStandbyVec * WalkSpd, 0.0f, 0.0f));
        }
        // 空中なら
        else
        {
            // 左右方向へ加速
            MoveMng.AddMove(new Vector3(walkStandbyVec * JumpSpd, 0.0f, 0.0f));
        }
    }
예제 #8
0
    //	}

    void ClimbJump()
    {
        if (!useAutoClimbJump)
        {
            return;
        }

        // 持ち上げ中や持ち上げ入力があれば処理しない
        //		if (Lift.IsLifting || (Input.GetAxis("Lift") != 0.0f)) return;
        if (Lift.IsLifting || (VirtualController.GetAxis(VirtualController.CtrlCode.Lift) != 0.0f))
        {
            return;
        }

        // ジャンプ可能でなければ処理しない
        if (!canJump)
        {
            return;
        }

        // 接地中でも水上安定中でもなく、水上安定中ブロックに乗ってもいなければ処理しない
        if (!Land.IsLanding && !WaterStt.IsWaterSurface && !Land.IsWaterFloatLanding)
        {
            return;
        }

        // 左右への移動入力がなければ処理しない
        if (walkStandbyVec == 0.0f)
        {
            return;
        }

        // 自動ジャンプ判定がなければ処理しない
        if ((ClimbJumpWeightLvCollider == null) || (ClimbJumpWeightLvCollider.Count <= (int)WeightMng.WeightLv) || (ClimbJumpWeightLvCollider[(int)WeightMng.WeightLv] == null) ||
            (ClimbJumpWeightLvInWaterCollider == null) || (ClimbJumpWeightLvInWaterCollider.Count <= (int)WeightMng.WeightLv) || (ClimbJumpWeightLvInWaterCollider[(int)WeightMng.WeightLv] == null))
        {
            return;
        }

        Transform climbJumpCol;

        if (!WaterStt.IsInWater)
        {
            climbJumpCol = ClimbJumpWeightLvCollider[(int)WeightMng.WeightLv];
        }
        else
        {
            climbJumpCol = ClimbJumpWeightLvInWaterCollider[(int)WeightMng.WeightLv];
        }

        // 自動ジャンプ判定内に対象オブジェクトがなければ処理しない
        if (Physics.OverlapBox(climbJumpCol.transform.position,
                               climbJumpCol.lossyScale * 0.5f,
                               climbJumpCol.rotation, climbJumpMask).Length <= 0)
        {
            return;
        }

        // 現在の向きと移動入力方向が異なれば処理しない
        if (Vector3.Dot((climbJumpCol.position - transform.position), (Vector3.right * walkStandbyVec)) <= 0.0f)
        {
            return;
        }

        // ジャンプアニメーション
        if (!Lift.IsLifting)
        {
            PlAnim.StartJump();
        }
        else
        {
            PlAnim.StartHoldJump();
        }

        // 前回までの上下方向の加速度を削除
        MoveMng.StopMoveVirtical(MoveManager.MoveType.prevMove);

        // 左右方向の移動量も一更新だけ制限
        MoveMng.OneTimeMaxSpd = jumpStartOneTimeLimitSpd;

        // 上方向へ加速
        if (!WaterStt.IsInWater)
        {
            MoveMng.AddMove(new Vector3(0.0f, ClimbJumpWeightLvHeight[(int)WeightMng.WeightLv], 0.0f));
        }
        // 水中
        else
        {
            MoveMng.AddMove(new Vector3(0.0f, ClimbJumpWeightLvHeightInWater[(int)WeightMng.WeightLv], 0.0f));
        }

        // 離地
        Land.IsLanding          = false;
        WaterStt.IsWaterSurface = false;
        WaterStt.BeginWaterStopIgnore();
    }
예제 #9
0
    bool Jump()
    {
        if (!useManualJump)
        {
            return(false);
        }
        if (IsHandSpringWeit)
        {
            return(false);
        }

        // ジャンプ入力(トリガー)がなければ
        if (!jumpStandbyFlg || prevJumpStandbyFlg)
        {
            return(false);
        }
        // ジャンプ可能でなければ
        if (!canJump)
        {
            return(false);
        }
        // 天井反転中なら
        if (IsHandSpring)
        {
            return(false);
        }

        // 着地していなければ
        if (!IsLanding && !WaterStt.IsWaterSurface && !Land.IsWaterFloatLanding)
        {
            return(false);
        }

        // 水面で安定した瞬間であれば
        if (WaterStt.IsWaterSurfaceChange && WaterStt.IsWaterSurface)
        {
            return(false);
        }

        // ステージに接地、又は水面で安定していなければ
        //		Debug.LogWarning("IsLanding:" + Land.IsLanding);
        //if (!Land.IsLanding && !WaterStt.IsWaterSurface) {
        if (!(Land.IsLanding || WaterStt.IsWaterSurface))
        {
            // 接地、又は安定しているオブジェクトにも接地していなければ
            List <Transform> pileObjs  = Pile.GetPileBoxList(new Vector3(0.0f, MoveMng.GravityForce, 0.0f));
            bool             stagePile = false;
            foreach (var pileObj in pileObjs)
            {
                Landing    pileLand     = pileObj.GetComponent <Landing>();
                WaterState pileWaterStt = pileObj.GetComponent <WaterState>();
                //				WaterState pileWaterStt = pileObj.GetComponent<WaterState>();
                //				if ((pileLand && (pileLand.IsLanding || pileLand.IsExtrusionLanding)) || (pileWaterStt && (pileWaterStt.IsWaterSurface))) {
                if ((pileLand && (pileLand.IsLanding || pileLand.IsExtrusionLanding || pileWaterStt.IsWaterSurface)))
                {
                    stagePile = true;
                    break;
                }
            }
            if ((pileObjs.Count == 0) || !stagePile)
            {
                // ジャンプ不可
                return(false);
            }
        }

        // 水面の場合
        if (WaterStt.IsWaterSurface)
        {
            // 自身の上にオブジェクトが乗っていればジャンプできない
            if (Pile.GetPileBoxList(Vector3.up).Count > 0)
            {
                return(false);
            }
        }

        // ジャンプ直後であれば
        //		if (jumpLimitTime > Time.time) return;

        Debug.Log("Jump");

        // パーティクル生成
        if (IsLanding)
        {
            GetComponent <GeneratePlayerJumpJet>().GenerateInGroundEffect();
        }
        else if (WaterStt.IsWaterSurface)
        {
            GetComponent <GeneratePlayerJumpJet>().GenerateInWaterSurfaceEffect();
        }
        else
        {
            GetComponent <GeneratePlayerJumpJet>().GenerateInWaterEffect();
        }

        // ジャンプアニメーション
        if (!Lift.IsLifting)
        {
            PlAnim.StartJump();
        }
        else
        {
            PlAnim.StartHoldJump();
        }

        if (!WaterStt.IsWaterSurface)
        {
            // サウンド再生
            SoundManager.SPlay(jumpSE, jumpSEDeray);
        }

        // 前回までの上下方向の加速度を削除
        MoveMng.StopMoveVirtical(MoveManager.MoveType.prevMove);

        // 左右方向の移動量をジャンプ中速度まで下げる
        MoveMng.PrevMove = new Vector3(Mathf.Clamp(MoveMng.PrevMove.x, -JumpSpd, JumpSpd), MoveMng.PrevMove.y, MoveMng.PrevMove.z);

        // 左右方向の加速度を削除
        //		MoveMng.StopMoveHorizontalAll();

        // 左右方向の移動量も一更新だけ制限
        //		MoveMng.OneTimeMaxSpd = jumpStartOneTimeLimitSpd;

        // 上方向へ加速
        //float jumpGravityForce = (0.5f * Mathf.Pow(jumpTime * 0.5f, 2) + jumpHeight);	// ジャンプ中の重力加速度
        //		float jumpGravityForce = -100;   // ジャンプ中の重力加速度

        //		MoveMng.AddMove(new Vector3(0.0f, (-jumpGravityForce * JumpTime * 0.5f), 0.0f));
        //		Debug.Log(jumpGravityForce);

        // 離地方向に移動
        if (!WaterStt.IsInWater || WaterStt.IsWaterSurface)
        {
//			Debug.LogWarning("landJump");
            MoveMng.AddMove(new Vector3(0.0f, (JumpHeight), 0.0f));
        }
        else
        {
//			Debug.LogWarning("inWaterJump");
            MoveMng.AddMove(new Vector3(0.0f, (JumpHeightInWater), 0.0f));
        }

        // 離地
        Land.IsLanding          = false;
        WaterStt.IsWaterSurface = false;
        WaterStt.BeginWaterStopIgnore();

        //// ジャンプ入力を無効化
        //prevJumpStandbyFlg = jumpStandbyFlg;
        //jumpStandbyFlg = false;

        // 通常の重力加速度を一時的に無効
        //MoveMng.GravityCustomTime = (Time.time + JumpTime);
        //MoveMng.GravityForce = jumpGravityForce;

        // 次回ジャンプ可能時間を設定
        //		jumpLimitTime = Time.time + jumpTime * 0.5f;	// ジャンプしてからジャンプ滞空時間の半分の時間まではジャンプ不可

        return(true);
    }
예제 #10
0
    bool Jump()
    {
        // ジャンプ入力(トリガー)がなければ
        if (!jumpStandbyFlg || prevJumpStandbyFlg)
        {
            return(false);
        }

        // ジャンプ可能でなければ
        if (!canJump)
        {
            return(false);
        }

        // ステージに接地、又は水面で安定していなければ
        Debug.LogWarning("IsLanding:" + Land.IsLanding);
        //if (!Land.IsLanding && !WaterStt.IsWaterSurface) {
        if (!(Land.IsLanding || WaterStt.IsWaterSurface))
        {
            PileWeight pile = GetComponent <PileWeight>();
            // 接地、又は安定しているオブジェクトにも接地していなければ
            List <Transform> pileObjs  = pile.GetPileBoxList(new Vector3(0.0f, MoveMng.GravityForce, 0.0f));
            bool             stagePile = false;
            foreach (var pileObj in pileObjs)
            {
                Landing    pileLand     = pileObj.GetComponent <Landing>();
                WaterState pileWaterStt = pileObj.GetComponent <WaterState>();
                if ((pileLand && (pileLand.IsLanding || pileLand.IsExtrusionLanding)) || (pileWaterStt && (pileWaterStt.IsWaterSurface)))
                {
                    stagePile = true;
                }
            }
            if ((pileObjs.Count == 0) || !stagePile)
            {
                // ジャンプ不可
                return(false);
            }
        }

        // ジャンプ直後であれば
        //		if (jumpLimitTime > Time.time) return;

        Debug.Log("Jump");

        // ジャンプアニメーション
        if (!Lift.IsLifting)
        {
            PlAnim.StartJump();
        }
        else
        {
            PlAnim.StartHoldJump();
        }

        // 前回までの上下方向の加速度を削除
        MoveMng.StopMoveVirtical(MoveManager.MoveType.prevMove);

        // 左右方向の加速度を削除
        //		MoveMng.StopMoveHorizontalAll();

        // 左右方向の移動量も一更新だけ制限
        MoveMng.OneTimeMaxSpd = jumpStartOneTimeLimitSpd;

        // 上方向へ加速
        //float jumpGravityForce = (0.5f * Mathf.Pow(jumpTime * 0.5f, 2) + jumpHeight);	// ジャンプ中の重力加速度
        //		float jumpGravityForce = -100;   // ジャンプ中の重力加速度

        //		MoveMng.AddMove(new Vector3(0.0f, (-jumpGravityForce * JumpTime * 0.5f), 0.0f));
        //		Debug.Log(jumpGravityForce);

        MoveMng.AddMove(new Vector3(0.0f, (JumpHeight), 0.0f));

        // 離地
        Land.IsLanding          = false;
        WaterStt.IsWaterSurface = false;
        WaterStt.BeginWaterStopIgnore();

        // ジャンプ入力を無効化
        jumpStandbyFlg = false;

        // 通常の重力加速度を一時的に無効
        //MoveMng.GravityCustomTime = (Time.time + JumpTime);
        //MoveMng.GravityForce = jumpGravityForce;

        // 次回ジャンプ可能時間を設定
        //		jumpLimitTime = Time.time + jumpTime * 0.5f;	// ジャンプしてからジャンプ滞空時間の半分の時間まではジャンプ不可

        return(true);
    }