Beispiel #1
0
    private void CheckGround()
    {
        bool groundedResult = false;

        DistancetoGround = 0f;

        if (isGrounded)
        {
            groundedResult = Physics.Raycast(Origin.position + Offset, Vector3.down, out m_Hit, MaxDistanceToGround);
        }
        else
        {
            groundedResult = Physics.Raycast(Origin.position + Offset, Vector3.down, out m_Hit, MaxDistanceToGround + InAirDistanceExtension);
        }

        Angle = Vector3.Angle(m_Hit.normal, transform.forward) - 90;

        if (isGrounded != groundedResult)
        {
            OnGroundedChange?.Invoke(groundedResult);
        }
        _isGrounded = groundedResult;
        if (_isGrounded)
        {
            DistancetoGround = (Origin.position.y - m_Hit.point.y);
            if (DistancetoGround < 0)
            {
                DistancetoGround = 0f;
            }
        }
    }
Beispiel #2
0
    private void HasGroundUpdated()
    {
        _Mover.CheckForGround();
        var result = _Mover.IsGrounded();

        if (_isGrounded != result)
        {
            OnGroundedChange?.Invoke(result);
            _isGrounded = result;
        }
    }