예제 #1
0
파일: Player.cs 프로젝트: W3D3/ColorTrip
        void Update()
        {
            Vector2 input    = new Vector2(GamepadInput.HorizontalVal(), 0);
            int     wallDirX = (controller.collisions.left) ? -1 : 1;

            float targetVelocityX = input.x * moveSpeed;

            //if (ZeroGravity)
            //{
            //    if (Mathf.Abs(velocity.x) < 0.0001f)
            //    {
            //        velocity.x = Mathf.Abs(1 * Mathf.Sign(velocity.x)) < 0.0001f ? 1 : Mathf.Sign(velocity.x);
            //    }
            //}
            //else
            //{
            if (!ZeroGravity)
            {
                velocity.x = Mathf.SmoothDamp(velocity.x, targetVelocityX, ref velocityXSmoothing,
                                              (controller.collisions.below) ? accelerationTimeGrounded : accelerationTimeAirborne);
            }
            //}

            bool wallSliding = false;

            if ((controller.collisions.left || controller.collisions.right) && !controller.collisions.below && !ZeroGravity)
            {
                wallSliding = true;

                if (velocity.y < -wallSlideSpeedMax)
                {
                    velocity.y = -wallSlideSpeedMax;
                }

                if (timeToWallUnstick > 0)
                {
                    velocityXSmoothing = 0;
                    velocity.x         = 0;

                    if (input.x != wallDirX && input.x != 0)
                    {
                        timeToWallUnstick -= Time.deltaTime;
                    }
                    else
                    {
                        timeToWallUnstick = wallStickTime;
                    }
                }
                else
                {
                    timeToWallUnstick = wallStickTime;
                }
            }

            if ((controller.collisions.above || controller.collisions.below) && !ZeroGravity)
            {
                velocity.y = 0;
            }

            if (controller.collisions.below)
            {
                canDash = true;
            }

            if (GamepadInput.Jump())
            {
                if (wallSliding)
                {
                    velocity.x = -wallDirX * wallLeap.x;
                    velocity.y = wallLeap.y;
                }
                if (controller.collisions.below)
                {
                    //GameManager.instance.playJumpSound();
                    velocity.y = jumpVelocity;
                }
            }

            if (GamepadInput.Dash() && canDash && input.normalized.x != 0)
            {
                //GameManager.instance.playDashSound();
                velocity.x = input.normalized.x * dash;
                velocity.y = 7; //very importante
                canDash    = false;
            }


            if (!ZeroGravity)
            {
                velocity.y += gravity * Time.deltaTime;
            }

            controller.Move(velocity * Time.deltaTime, input);
        }