using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEditor;
|
|
public class UpdateUIPositionFromPSD : EditorWindow
|
{
|
public static UpdateUIPositionFromPSD window = null;
|
|
[UnityEditor.MenuItem("程序/PSD To UGUI 辅助工具")]
|
static void Init()
|
{
|
window = GetWindow(typeof(UpdateUIPositionFromPSD), false, "PSD To UGUI 辅助工具") as UpdateUIPositionFromPSD;
|
window.Show();
|
window.autoRepaintOnSceneChange = true;
|
}
|
|
GameObject target;
|
Vector2 m_Position;
|
Vector2 m_Size;
|
|
private void OnGUI()
|
{
|
target = (GameObject)EditorGUILayout.ObjectField("目标", UnityEditor.Selection.activeGameObject, typeof(GameObject), true);
|
m_Position = EditorGUILayout.Vector2Field("坐标", m_Position);
|
m_Size = EditorGUILayout.Vector2Field("大小", m_Size);
|
|
EditorGUILayout.Space();
|
EditorGUILayout.Space();
|
EditorGUILayout.Space();
|
|
if (GUILayout.Button("应用"))
|
{
|
RecordChildrenPositions();
|
Apply();
|
RestoreChildrenPositions();
|
}
|
}
|
|
Vector2 anchorMaxBuf = Vector2.zero;
|
Vector2 anchorMinBuf = Vector2.zero;
|
|
private void Apply()
|
{
|
if (target == null)
|
{
|
return;
|
}
|
|
var selected = target.GetComponent<RectTransform>();
|
if (selected == null)
|
{
|
return;
|
}
|
|
selected.sizeDelta = m_Size;
|
|
anchorMaxBuf = selected.anchorMax;
|
anchorMinBuf = selected.anchorMin;
|
|
selected.anchorMax = new Vector2(0, 1f);
|
selected.anchorMin = new Vector2(0, 1f);
|
|
var newX = m_Position.x * 0.01f - 6.67f + m_Size.x * 0.01f * selected.pivot.x;
|
var newY = 3.75f - m_Position.y * 0.01f - (m_Size.y * 0.01f * (1f - selected.pivot.y));
|
|
selected.position = new Vector3(newX, newY, 0f);
|
|
var position1 = selected.position;
|
|
selected.anchorMax = anchorMaxBuf;
|
selected.anchorMin = anchorMinBuf;
|
|
selected.position = position1;
|
}
|
|
|
Dictionary<Transform, Vector2> childrenPosition = new Dictionary<Transform, Vector2>();
|
|
private void RecordChildrenPositions()
|
{
|
if (target == null)
|
{
|
return;
|
}
|
|
childrenPosition.Clear();
|
|
int childCount = target.transform.childCount;
|
for (int i = 0; i < childCount; i++)
|
{
|
var child = target.transform.GetChild(i);
|
childrenPosition[child] = child.position;
|
}
|
|
}
|
|
private void RestoreChildrenPositions()
|
{
|
foreach (var child in childrenPosition.Keys)
|
{
|
child.position = childrenPosition[child];
|
}
|
}
|
|
}
|