UG4L7-3——动态加载界面
UG4L7-3——动态加载界面
本章代码关键字
1 | //GRoot相关 |
使用UIPanel还是动态创建UI?
UIPanel一般用来做3DUI,它可以更加方便的挂载到任意GameObject上
优点是可以直接摆放在场景中,但是一般的UI界面不建议使用UIPanel,因为随着UI的增多,项目的变大,通过它管理UI非常的麻烦
动态创建可以使用代码创建UI,可以应用到传统的设计模式上,需要注意的是,动态创建的UI不要和其它GameObject相关联
GRoot
GRoot
是动态创建UI时会自动创建的根对象,它主要负责适配等工作
-
设置适配(分辨率自适应)API
- 参数一、二:设计分辨率
- 参数三:适配模式
这里参数应当是和你在FairyGUI编辑器里的项目设置里的适配设置是一致的
1
GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatchMode.MatchHeight);
-
创建好的UI对象添加为它的子对象
1
GRoot.inst.AddChild(gObj);
将创建出来的UI对象添加到
GRoot
下后,UI就能显示出来了
代码动态创建UI
主要步骤
- 设置适配相关内容
- 加载包
- 加载依赖包
- 动态创建UI资源
设置分辨率适配相关,该代码在进入游戏后设置一次就可以了
1 | GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatchMode.MatchHeight); |
创建UI之前,必须加载包,并加载其依赖包
1 | UIPackage package = UIPackage.AddPackage("UI/Teach"); |
动态加载和销毁UI资源
-
同步加载
- 参数一:包名(需要已经加载完毕)
- 参数二:组件名
值得一提的是,这样创建出来的对象是
GObject
类型的,我们需要使用.asCom
属性来将其as
成GComponent
类型1
2GComponent view = UIPackage.CreateObject("teach", "TeachPanel").asCom;
GRoot.inst.AddChild(view); -
异步加载
- 参数一:包名(需要已经加载完毕)
- 参数二:组件名
- 参数三:回调函数
第三个参数的回调函数需要
GObject
类型的参数,再在回调函数里写加载出来的对象应该做什么1
2
3
4
5UIPackage.CreateObjectAsync("teach", "TeachPanel", (obj) =>
{
GComponent view = obj.asCom;
GRoot.inst.AddChild(view);
}); -
销毁UI
1
view.Dispose();
GComponent常用API
-
位置
1
2
3view.x = 10;
view.y = 10;
view.SetPosition(0, 0, 0); -
宽高
1
2
3view.width = 1000;
view.height = 500;
view.SetSize(1365, 768); -
轴心点
1
2
3
4view.pivotX = 0;
view.pivotY = 0;
view.SetPivot(0, 0, true);
view.pivotAsAnchor = false; -
角度
1
view.rotation = 0;
-
可见与否
1
view.visible = true;
-
置灰
1
view.grayed = true;
-
缩放(范围0~1)
1
2view.scaleX = 1;
view.scaleY = 1; -
排序层
1
view.sortingOrder = 1;
-
点击不穿透
1
view.opaque = true;
-
子对象数量
1
print(view.numChildren); //与FairyGUI编辑器的显示列表的数量一致
-
子对象相关
1
GComponent childview = null; //假设这是一个子对象
-
添加子对象
1
view.AddChild(childview);
-
根据名字获取子对象
1
view.GetChild("n1");
-
根据索引获取子对象
1
view.GetChildAt(0);
-
设置对象排序位置
1
view.SetChildIndex(childview, 5);
-
设置子对象排序规则
-
升序(默认),从小到大依次渲染,序号大的显示在前面
1
view.childrenRenderOrder = ChildrenRenderOrder.Ascent;
-
降序,从大到小依次渲染,序号小的显示在前面
1
view.childrenRenderOrder = ChildrenRenderOrder.Descent;
-
拱形,设置一个顶峰值显示在最前面,两侧的依次渲染
1
2view.childrenRenderOrder = ChildrenRenderOrder.Arch;
view.apexIndex = 5;
-
-
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!