FishPlayer

一个喜欢摸鱼的废物

0%

Unity UGUI Ez Anchor

经过了一次用户测试之后,拿到的反馈说我们很多页面的UX设计都不行,只能各种重做,不论是我程序这边还是UXUI组那边,我们都需要重新拼好一些 prefab。

然后还有一些旧的 prefab 我们需要换皮改尺寸之类的,这次就来分享一个简单的小工具,用来做一些简单的尺寸适配。

RectTransform 上 anchor 的 Min, Max 都是已经做了归一化的值。依靠调整 anchor 的值就可以设置当前元素在父元素中的相对位置和面积占比。
具体参考下面这篇文章
https://blog.csdn.net/ChinarCSDN/article/details/88983587

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

[InitializeOnLoad]
public static class RectTransformExtendedEditor
{
struct EditContext
{
public RectTransform Transform;
}

private static EditContext m_context;
private static bool m_showTool;

static RectTransformExtendedEditor()
{
Selection.selectionChanged += OnSelectionChanged;
}

private static void OnSelectionChanged()
{
SceneView.duringSceneGui -= OnSceneGUI;
if (Selection.activeTransform is RectTransform rectTransform)
{
m_context = new EditContext()
{
Transform = rectTransform
};

SceneView.duringSceneGui += OnSceneGUI;
}
}

private static void OnSceneGUI(SceneView sceneView)
{
Handles.BeginGUI();
if (GUI.Button(new Rect(0, 0, 20, 20), "T"))
{
m_showTool = !m_showTool;
}
if (m_showTool)
{
GUILayout.BeginArea(new Rect(0, 20, 120, 320));
if (GUILayout.Button("Set Anchors"))
{
RectTransform rectTransform = m_context.Transform;
RectTransform parent = rectTransform.parent as RectTransform;

Undo.RecordObject(rectTransform, "Set Anchors");

if (parent != null)
{
Vector2 anchorMin = new Vector2(
rectTransform.anchorMin.x + rectTransform.offsetMin.x / parent.rect.width,
rectTransform.anchorMin.y + rectTransform.offsetMin.y / parent.rect.height);

Vector2 anchorMax = new Vector2(
rectTransform.anchorMax.x + rectTransform.offsetMax.x / parent.rect.width,
rectTransform.anchorMax.y + rectTransform.offsetMax.y / parent.rect.height);

rectTransform.anchorMin = anchorMin;
rectTransform.anchorMax = anchorMax;
rectTransform.offsetMin = rectTransform.offsetMax = Vector2.zero;
}
}
GUILayout.EndArea();
}

Handles.EndGUI();
}
}

End

有了这个 acnhor 适配真的方便不少。有时候我们做好一个 list element,但在不同的地方用到的时候大小可能不一样。
用这个适配调整以后可以防止各种奇妙出格,而且就点两下按钮,对于 UXUI 团队来说也是非常容易上手的。