最先最先建立一个 GameEntry.cs 脚本

https://gameframework.cn/tutorial/tutorial-003/ 根据官方教程的建议去创建使用

UI界面脚本必须继承 UIFormLogic

GameFramework 预制体组件下有个 UI 子物体,默认 UIGroupHelper是DefaultUIGroupHelper,需新建一个继承 UIGroupHelperBase 脚本的项目配置

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
public class UGuiGroupHelper : UIGroupHelperBase
{
public const int DepthFactor = 10000;
private Canvas m_Canvas = null;
private int m_Depth = 0;

private void Awake()
{
m_Canvas = gameObject.GetOrAddComponent<Canvas>();
gameObject.GetOrAddComponent<GraphicRaycaster>();
}

private void Start()
{
InitRectTransform();
InitCanvas();
InitCanvasScaler();
m_Canvas.sortingOrder = DepthFactor * m_Depth;
}

private void InitRectTransform()
{
var rectTransform = GetComponent<RectTransform>();
rectTransform.anchorMin = Vector2.zero;
rectTransform.anchorMax = Vector2.one;
rectTransform.anchoredPosition = Vector2.zero;
rectTransform.sizeDelta = Vector2.zero;
}

private void InitCanvas()
{
m_Canvas.renderMode = RenderMode.ScreenSpaceOverlay;
}

private void InitCanvasScaler()
{
var canvasScaler = gameObject.GetOrAddComponent<CanvasScaler>();
canvasScaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
canvasScaler.referenceResolution = new Vector2(1920, 1080);
canvasScaler.screenMatchMode = CanvasScaler.ScreenMatchMode.MatchWidthOrHeight;
canvasScaler.matchWidthOrHeight = 0.8f;
}

public override void SetDepth(int depth)
{
m_Depth = depth;
m_Canvas.overrideSorting = true;
m_Canvas.sortingOrder = DepthFactor * depth;
}
}

创建一个UIGroup(图片引自 https://blog.csdn.net/weixin_42066580/article/details/117691546 )

UIGroup例子图片

OpenUI

GameEntry.UI.OpenUIForm("UI预制体路径(路径一定要包含 "Assets/")","UI预制体所属的UIGroup")

修改 UIFormLogic 脚本(OnInit方法内添加)

1
2
3
4
5
var rectTransform = gameObject.transform as RectTransform;
rectTransform.anchorMin = Vector2.zero;
rectTransform.anchorMax = Vector2.one;
rectTransform.anchoredPosition = Vector2.zero;
rectTransform.sizeDelta = Vector2.zero;