コード例 #1
0
    void VerticalCollision(ref Vector2 moveAmount, bool bIsMoveX)
    {
        float directionY = -1f;

        if (moveAmount.normalized.y != 0f)
        {
            directionY = Mathf.Sign(moveAmount.normalized.y);
        }

        _iVerticalHitCount = 0;
        moveAmount         = VerticalCollision(moveAmount, directionY, bIsMoveX);

        float rayLength = Mathf.Abs(moveAmount.y) + _fSkinWidth_Vertical;

        if (p_pCollisionInfo.climbingSlope)
        {
            float directionX = Mathf.Sign(moveAmount.x);
            rayLength = Mathf.Abs(moveAmount.x) + _fSkinWidth_Vertical;
            Vector2 rayOrigin = ((directionX == -1) ? _pRaycastOrigins.vecBound_BottomLeft : _pRaycastOrigins.vecBound_BottomRight) + Vector2.up * moveAmount.y;

            CalculateClimbSlope(rayOrigin, directionX, rayLength, ref moveAmount);
        }

        bool bIsStandOnPlatform = _iVerticalHitCount != 0 && directionY == -1f;

        if (bIsStandOnPlatform == false)
        {
            p_pCollisionInfo.DoSetSlopeSliding(false);
        }
    }