Beispiel #1
0
        /// <summary>
        /// 上下移動
        /// </summary>
        void VerticalMove()
        {
            float v = Input.GetAxisRaw("Vertical");

            StellaMove.myVelocity.y = v * upDownSpeed;

            // 登り切ったチェック
            if (v > 0.5f)
            {
                if (!StellaMove.IsIvyUp())
                {
                    // 前方に飛び降り
                    StellaMove.myVelocity.x = StellaMove.MiniJumpSpeedMax * StellaMove.forwardVector.x;
                    StellaMove.myVelocity.y = putDownSpeedY;
                    StellaMove.instance.Gravity();
                    StellaMove.instance.Move();
                    StellaMove.instance.ChangeAction(StellaMove.ActionType.Air);
                    return;
                }
            }

            // 移動
            float          lastY = StellaMove.instance.transform.position.y;
            CollisionFlags flags = StellaMove.ChrController.Move(StellaMove.myVelocity * Time.fixedDeltaTime);

            if (flags.HasFlag(CollisionFlags.Below) && StellaMove.myVelocity.y < 0f)
            {
                // 下にぶつかっていたらツタを離す
                StellaMove.myVelocity = Vector3.zero;
                StellaMove.instance.ChangeAction(StellaMove.ActionType.Walk);
                return;
            }

            float vely = (lastY - StellaMove.instance.transform.position.y) / Time.fixedDeltaTime;

            if (Mathf.Abs(vely) < Mathf.Abs(StellaMove.myVelocity.x))
            {
                vely = StellaMove.myVelocity.x;
            }
            StellaMove.SetAnimFloat("VelY", vely);
        }