New file |
| | |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using UnityEditor; |
| | | using System.IO; |
| | | using System.Text.RegularExpressions; |
| | | using UnityEngine.UI; |
| | | |
| | | public class ThirdLevelFrameProcessor |
| | | { |
| | | [MenuItem("程序/加载三级界面")] |
| | | public static void CreateAllThirdLevelFrame() |
| | | { |
| | | var oldSprite1 = UILoader.LoadSprite("1LevelFrame", "TY_K_3J_2"); |
| | | var oldSprite2 = UILoader.LoadSprite("1LevelFrame", "TY_K_3J_1"); |
| | | var oldSprite3 = UILoader.LoadSprite("4Interactable", "Close_a"); |
| | | |
| | | var newSprite1 = UILoader.LoadSprite("1LevelFrame", "ThirdLevel_Frame"); |
| | | var newSprite2 = UILoader.LoadSprite("1LevelFrame", "ThirdLevel_Bg"); |
| | | var newSprite3 = UILoader.LoadSprite("1LevelFrame", "ThirdLevel_Close"); |
| | | |
| | | var path = AssetDatabase.GetAssetPath(newSprite1); |
| | | var guid = AssetDatabase.AssetPathToGUID(path); |
| | | |
| | | var path1 = AssetDatabase.GetAssetPath(oldSprite1); |
| | | var guid1 = AssetDatabase.AssetPathToGUID(path1); |
| | | |
| | | var path2 = AssetDatabase.GetAssetPath(oldSprite2); |
| | | var guid2 = AssetDatabase.AssetPathToGUID(path2); |
| | | |
| | | var path3 = AssetDatabase.GetAssetPath(oldSprite3); |
| | | var guid3 = AssetDatabase.AssetPathToGUID(path3); |
| | | |
| | | var allwindowGuids = AssetDatabase.FindAssets("t: prefab", new string[] { "Assets/ResourcesOut/UI/Window" }); |
| | | var totalCount = allwindowGuids.Length; |
| | | var count = 0; |
| | | |
| | | foreach (var windowGuid in allwindowGuids) |
| | | { |
| | | count++; |
| | | var windowPath = AssetDatabase.GUIDToAssetPath(windowGuid); |
| | | var content = File.ReadAllText(Application.dataPath + windowPath.Substring(6, windowPath.Length - 6)); |
| | | |
| | | GameObject instance = null; |
| | | GameObject prefab = null; |
| | | |
| | | if (Regex.IsMatch(content, guid)) |
| | | { |
| | | prefab = AssetDatabase.LoadAssetAtPath<GameObject>(windowPath); |
| | | instance = GameObject.Instantiate(prefab); |
| | | instance.name = prefab.name; |
| | | instance.SetActive(true); |
| | | PrefabUtility.ConnectGameObjectToPrefab(instance, prefab); |
| | | } |
| | | |
| | | continue; |
| | | |
| | | if (prefab == null) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | Vector2 min = Vector2.zero; |
| | | Vector2 max = Vector2.zero; |
| | | |
| | | var width = 0f; |
| | | |
| | | var images = prefab.GetComponentsInChildren<Image>(true); |
| | | |
| | | foreach (var image in images) |
| | | { |
| | | if (image.sprite == oldSprite1) |
| | | { |
| | | max = UIUtility.GetMaxWorldPosition(image.rectTransform); |
| | | width = image.rectTransform.rect.width; |
| | | } |
| | | } |
| | | |
| | | foreach (var image in images) |
| | | { |
| | | if (image.sprite == oldSprite2 && min == Vector2.zero) |
| | | { |
| | | min = UIUtility.GetMinWorldPosition(image.rectTransform); |
| | | } |
| | | } |
| | | |
| | | Image image1 = null; |
| | | Image image2 = null; |
| | | Image image3 = null; |
| | | |
| | | foreach (var image in images) |
| | | { |
| | | if (image.sprite == oldSprite1) |
| | | { |
| | | image1 = image; |
| | | var rectTransform = image.rectTransform; |
| | | var oldHeight = rectTransform.rect.height; |
| | | |
| | | image.sprite = newSprite1; |
| | | image.type = Image.Type.Sliced; |
| | | image.transform.SetAsLastSibling(); |
| | | rectTransform.pivot = rectTransform.anchorMax = rectTransform.anchorMin = Vector2.one * 0.5f; |
| | | |
| | | var x1 = max.y - oldHeight; |
| | | var x2 = (max.y - min.y) * 0.5f - oldHeight; |
| | | var y = x1 - x2; |
| | | |
| | | max = max.SetY(max.y - 3.5f); |
| | | |
| | | rectTransform.sizeDelta = new Vector2(width + 13, (max.y - min.y)); |
| | | rectTransform.anchoredPosition = new Vector2((max.x + min.x) - 3.5f, y - 3.5f); |
| | | } |
| | | } |
| | | |
| | | foreach (var image in images) |
| | | { |
| | | if (image.sprite == oldSprite2) |
| | | { |
| | | if (image2 == null) |
| | | { |
| | | image2 = image; |
| | | var rectTransform = image.rectTransform; |
| | | |
| | | image.sprite = newSprite2; |
| | | image.type = Image.Type.Simple; |
| | | rectTransform.pivot = Vector2.one * 0.5f; |
| | | rectTransform.sizeDelta = image1.rectTransform.sizeDelta - new Vector2(55, 23); |
| | | rectTransform.position = image1.transform.position - new Vector3(0, 8f, 0); |
| | | var mirrorImage = image2.transform.GetComponent<MirrorImage>(); |
| | | if (mirrorImage) |
| | | { |
| | | Object.DestroyImmediate(mirrorImage, true); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | GameObject.DestroyImmediate(image.gameObject, true); |
| | | } |
| | | } |
| | | } |
| | | |
| | | foreach (var image in images) |
| | | { |
| | | if (image.sprite == oldSprite3 && image.gameObject.activeSelf) |
| | | { |
| | | image3 = image; |
| | | var rectTransform = image.rectTransform; |
| | | |
| | | image.sprite = newSprite3; |
| | | image.SetNativeSize(); |
| | | image.transform.SetParent(image1.transform); |
| | | image.transform.SetAsLastSibling(); |
| | | |
| | | rectTransform.position = image1.transform.position |
| | | + new Vector3(image1.rectTransform.rect.width * 0.5f, image1.rectTransform.rect.height * 0.5f, 0f) |
| | | - new Vector3(33f, 2.3f, 0f); |
| | | } |
| | | } |
| | | |
| | | EditorUtility.DisplayProgressBar("处理中三级界面", "处理中...", (float)count / totalCount); |
| | | } |
| | | |
| | | EditorUtility.ClearProgressBar(); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |