public override int CalculateDistance(SortingOrderData sorter)
        {
            if (cam == null)
            {
                return(0);
            }

            float currentAxisValue    = 0;
            float camCurrentAxisValue = 0;

            switch (_currentAxis)
            {
            case Axis3DEnum.X:
                currentAxisValue    = sorter.transform.position.x;
                camCurrentAxisValue = cam.transform.position.x;
                break;

            case Axis3DEnum.Y:
                currentAxisValue    = -sorter.transform.position.y;
                camCurrentAxisValue = cam.transform.position.y;
                break;

            case Axis3DEnum.Z:
                currentAxisValue    = sorter.transform.position.z;
                camCurrentAxisValue = cam.transform.position.z;
                break;
            }

            return(Mathf.FloorToInt((-Mathf.Abs(camCurrentAxisValue - currentAxisValue) * _currentStep)));
        }
        public override int CalculateDistance(SortingOrderData sorter)
        {
            if (cam == null)
            {
                return(0);
            }

            float currentAxisValue = 0;

            Vector2 viewportPoint   = cam.WorldToViewportPoint(sorter.transform.position);
            int     maxSortingLayer = SpriteRenderExtend.MaxSortingLayer;

            currentAxisValue = currentAxis == SemiAxis2DEnum.Up || currentAxis == SemiAxis2DEnum.Down ? viewportPoint.y : viewportPoint.x;
            float a = currentAxis == SemiAxis2DEnum.Up || currentAxis == SemiAxis2DEnum.Right ? maxSortingLayer : -maxSortingLayer;
            float b = currentAxis == SemiAxis2DEnum.Up || currentAxis == SemiAxis2DEnum.Right ? -maxSortingLayer : maxSortingLayer;

            float aux = Mathf.Lerp(a, b, currentAxisValue);

            return(Mathf.FloorToInt(aux));
        }