using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine.UI;
using System.Text;
using System.IO;
public class ArtResTools_RepleceOutlineToOutlineEx
{
static Canvas canv;
static int allPrefablen;
static int currentLen;
[MenuItem("Assets/Tools/替换outlineToOutlineEx", false)]
public static void RepleaceOutlineToOutlineEx()
{
canv=InstanceCanvas();
var res = AssetDatabase.FindAssets("t:Prefab", new string[] {
"Assets/AssetsPackage/UI/Prefabs"
});
allPrefablen=res.Length;
if (res == null || res.Length < 1) return;
for (int i = 0 ; i < res.Length ; i++)
{
currentLen=i;
string path = AssetDatabase.GUIDToAssetPath( res[i] );
//string path="Assets/AssetsPackage/UI/Prefabs/View/UICardPool.prefab";
var pb = AssetDatabase.LoadAssetAtPath<GameObject>(path);
if (pb == null) continue;
//实例化prefab
var prefabInst=PrefabUtility.InstantiatePrefab(pb) as GameObject;
if(canv==null){
Debug.LogWarning("canvas 为空");
}
prefabInst.transform.SetParent(canv.transform,false);
//找到有outline的替換掉
FindOutLineAndReplece(prefabInst.transform);
PrefabUtility.ApplyPrefabInstance(prefabInst,InteractionMode.AutomatedAction);
GameObject.DestroyImmediate(prefabInst);
}
if(canv)
GameObject.DestroyImmediate(canv.gameObject);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
EditorUtility.ClearProgressBar();
}
public static Canvas InstanceCanvas(){
GameObject canvas=new GameObject("UICanvasTest");
Canvas canv=canvas.AddComponent<Canvas>();
canvas.AddComponent<CanvasScaler>();
canv.transform.localPosition=Vector3.one;
canvas.transform.localRotation=Quaternion.identity;
canv.renderMode=RenderMode.ScreenSpaceCamera;
canv.worldCamera=Camera.main;
canv.sortingLayerID=0;
canvas.GetComponent<CanvasScaler>().uiScaleMode=CanvasScaler.ScaleMode.ScaleWithScreenSize;
canvas.GetComponent<CanvasScaler>().referenceResolution=new Vector2(1920,1080);
canvas.GetComponent<CanvasScaler>().matchWidthOrHeight=1;
return canv;
}
public static void FindOutLineAndReplece(Transform rootTrans)
{
Outline[] outLines=rootTrans.GetComponentsInChildren<Outline>(true);
for(int i=outLines.Length-1;i>=0;i--)
{
var outline=outLines[i];
var trans=outline.transform;
if(outline){
var outlinecolor=outline.effectColor;
//加一
float outlineWidth=Mathf.Abs(outline.effectDistance.x)+1;
GameObject.DestroyImmediate(outline);
trans.gameObject.AddComponent<OutlineEx>();
trans.GetComponent<OutlineEx>().OutlineColor=outlinecolor;
trans.GetComponent<OutlineEx>().OutlineWidth=(int)outlineWidth;
EditorUtility.DisplayProgressBar(string.Format("正在替換{0}/{1}",currentLen,allPrefablen), PrefabUtility.FindPrefabRoot(trans.gameObject).name,currentLen*1f/allPrefablen);
// Debug.Log("替換 "+trans.name+" 成功");
}}
}
}
网友评论