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