void OnGUI() { isSortReverse = EditorGUILayout.Toggle("is Sort Reverse", isSortReverse); sortingOffsetString = EditorGUILayout.TextField("Sorting Offset", sortingOffsetString); sortingSpaceString = EditorGUILayout.TextField("Sorting Space", sortingSpaceString); sortingBy = (SortingBy)EditorGUILayout.EnumPopup("Sorting By", sortingBy); if (GUILayout.Button("Sorting Selected")) { SortingSelected(sortingBy); } Refresh(); }
void SortingSelected(SortingBy sortingBy) { Debug.Log("------- Sorting Selected Start -------"); //參數歸零 prepareSortingLayerItemsList = new List <PrepareSortSortingLayerItems>(); sortingOffset = 0; sortingSpace = 0; //轉換參數 if (sortingOffsetString == null || sortingSpaceString == null) { Debug.LogWarning("Sorting Space / Offset 數值未填"); return; } int.TryParse(sortingOffsetString, out sortingOffset); int.TryParse(sortingSpaceString, out sortingSpace); if (sortingSpace < 0) { Debug.LogWarning("Sorting Space 無法為負數"); return; } if (Selection.gameObjects != null) { // 取得場上選擇的物件放入 List foreach (var item in Selection.gameObjects) { PrepareSortSortingLayerItems tempPSSLI = new PrepareSortSortingLayerItems(); tempPSSLI.gameObject = item; if (item.TryGetComponent(out SpriteRenderer sr)) { tempPSSLI.spriteRenderer = sr; } if (item.TryGetComponent(out SortingGroup sg)) { tempPSSLI.sortingGroup = sg; } if (item.TryGetComponent(out ParticleSystemRenderer psr)) { tempPSSLI.particleSystemRenderer = psr; } prepareSortingLayerItemsList.Add(tempPSSLI); } // List 內容排序 List <PrepareSortSortingLayerItems> sortingResultList = new List <PrepareSortSortingLayerItems>(); if (sortingBy == SortingBy.X) { sortingResultList = prepareSortingLayerItemsList.OrderBy(_ => _.gameObject.transform.position.x).ToList(); } else if (sortingBy == SortingBy.Y) { sortingResultList = prepareSortingLayerItemsList.OrderBy(_ => _.gameObject.transform.position.y).ToList(); } else if (sortingBy == SortingBy.Z) { sortingResultList = prepareSortingLayerItemsList.OrderBy(_ => _.gameObject.transform.position.z).ToList(); } // 依照順序賦 Order in Layer 值 int reverseIt = (isSortReverse) ? 1 : 0; int index = sortingOffset + (sortingResultList.Count * sortingSpace + (2 - sortingSpace)) * reverseIt; reverseIt = (isSortReverse) ? -1 : 1; foreach (var item in sortingResultList) { if (item.spriteRenderer != null) { item.spriteRenderer.sortingOrder = index; } if (item.sortingGroup != null) { item.sortingGroup.sortingOrder = index; } if (item.particleSystemRenderer != null) { item.particleSystemRenderer.sortingOrder = index; } index += (sortingSpace + 1) * reverseIt; } Debug.Log("------- Sorting Selected Done -------"); } else { Debug.LogWarning("未選擇場上的 Game Object"); } }