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