示例#1
0
    void FixedUpdateSwim()
    {
        Vector2 movement = playerMovement.fishPlayer.GetAxis2D("Horizontal", "Vertical");

        if (playerMovement.moveInputDisabled)
        {
            movement = Vector2.zero;
        }

        if (movement.magnitude > 1)
        {
            movement.Normalize();
        }

        Vector2 targetSpeed = movement * _swimSpeedToUse;

        if (playerMovement.fishPlayer.GetButton("Move Ability"))
        {
            targetSpeed = movement * fastSwimSpeed;
        }

        rb.AddForceToAchieveTargetVelocity(targetSpeed, _swimForceToUse, swimMovementForceCurve);

        if (movement.magnitude > 0)
        {
            rb.drag = waterDragInput;
        }
        else
        {
            rb.drag = waterDragNoInput;
        }
    }
示例#2
0
    // Update is called once per frame
    void FixedUpdate()
    {
        if (active)
        {
            if (_player != null)
            {
                Vector2 toPlayer = _player.transform.position - transform.position;
                float   dist     = toPlayer.magnitude;

                Vector2 targetSpeed = toPlayer.normalized * maxSpeed;
                if (dist > targetDistFromPlayer && inWater && _player.state == PlayerMovementState.SWIMMING)
                {
                    rb.AddForceToAchieveTargetVelocity(targetSpeed, maxForce, velocityForceCurve);
                    rb.drag = .5f;
                }
                else
                {
                    rb.drag = 5;
                }
            }
        }
    }
    void FixedUpdateFly()
    {
        bool    moveAbilityHeld = player.GetButton("Move Ability");
        Vector2 movement        = player.GetAxis2D("Horizontal", "Vertical");

        //diving
        if (moveAbilityHeld)
        {
            Vector2 diveDirection = ClampVectorToAngleFromVector(movement.normalized, Vector2.down, 135);
            rb.AddForceToAchieveTargetVelocity(diveDirection * rb.velocity.magnitude, diveForce, diveVelocityForceCurve);

            Debug.DrawLine(transform.position, transform.position + (Vector3)diveDirection * 5);
        }
        //normal gliding
        else
        {
            //lift factor
            float liftFactor = xVelLiftForceCurve.Evaluate(Mathf.Abs(rb.velocity.x) / xVelForLift);
            //normal lift
            if (rb.velocity.y < yVelocityStableRange)
            {
                float liftToUse = liftForce * liftFactor;
                rb.AddForce(Vector2.up * liftToUse);
                print(liftToUse);
            }
            //if we aren't trying to dive, but we're going down fast still, stabilize!
            if (rb.velocity.y < -yVelocityStableRange)
            {
                rb.AddForce(Vector2.up * stabilizationLiftForce * liftFactor);
            }

            //now left/right movement
            if (Mathf.Abs(rb.velocity.x) < glideHorizontalSpeed)
            {
                rb.AddForce(movement.x * Vector2.right * glideHorizontalForce);
            }
        }
    }