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)); }