官方文档描述点击这里
先根据官网一点点学习吧,下载好官方示例
一.包体加载和卸载 几种方式
//===========下面是Resources目录下====================
//demo就是发布时填写的文件名
UIPackage.AddPackage("demo");
//如果在子目录下
UIPackage.AddPackage("路径/demo");
//如果不放到Resources或者其子目录下,可以传入全路径,但这种方法只能在Editor里使用
UIPackage.AddPackage("Assets/SomePath/Package1");
//=============assetbundle==========
UIPackage.AddPackage(desc_bundle, res_bundle);
UIPackage.AddPackage(bundle);
//同步加载方式
//assetPath参数底层不使用,但在回调中name参数会带上assetPath作为前缀。
UIPackage.AddPackage(assetPath, (string name, string extension, System.Type type, out DestroyMethod destroyMethod) => {
//name 资源的路径和名称;
//extension 资源的扩展名,例如png等;
//type 资源的类型,例如Texture,AudioClip等;
//destroyMethod 指示返回的资源应该怎样释放。例如复制的资源实例可以用Destroy,共享的资源实例需要用Unload,不需要底层处理则传None。
return res;
});
//异步加载方式,适用于Addressable。注意,这种方式必须是异步,不能在回调函数里直接设置结果。
//descData是包的描述数据,需要自行加载出来传入
//assetNamePrefix参数底层不使用,但在回调中name参数会带上assetPath作为前缀。
UIPackage.AddPackage(descData, assetNamePrefix, (string name, string extension, System.Type type, PackageItem item) => {
//name 资源的路径和名称;
//extension 资源的扩展名,例如png等;
//type 资源的类型,例如Texture,AudioClip等;
//item 参考下面的代码操作
some_asyc_call(()=> {
//destroyMethod 指示返回的资源应该怎样释放。例如复制的资源实例可以用Destroy,共享的资源实例需要用Unload,不需要底层处理则传None。
item.owner.SetItemAsset(item, res, destroyMethod);
});
});
//移除包
UIPackage.RemovePackage("package");
//加载所有的资源
UIPackage.LoadAllAssets
//释放ui资源包 不移除包 需要恢复是可使用 UIPackage.ReloadAssets 自动恢复
UIPackage.UnloadAssets
二 UIPanel 的使用
他的使用与ugui基本一致 但是他的坐标左上是(0,0)
获取ui 和动态创建uipanel
//获取ui
UIPanel panel = gameObject.GetComponent<UIPanel>();
GComponent view = panel.ui;
//我们也可以动态创建panel
//UIPanel的生命周期将和yourGameObject保持一致。再次提醒,注意yourGameObject的layer。
UIPanel panel = yourGameObject.AddComponent<UIPanel>();
panel.packageName = “包名”;
panel.componentName = “组件名”;
//下面这是设置选项非必须,注意很多属性都要在container上设置,而不是UIPanel
//设置renderMode的方式
panel.container.renderMode = RenderMode.WorldSpace;
//设置renderCamera的方式
panel.container.renderCamera = ...;
//设置fairyBatching的方式
panel.container.fairyBatching = true;
//设置sortingOrder的方式
panel.SetSortingOrder(1, true);
//设置hitTestMode的方式
panel.SetHitTestMode(HitTestMode.Default);
//最后,创建出UI
panel.CreateUI();
//对sortingOrder为100的UIPanel按z进行排序,z值越小,显示在越前面。
Stage.inst.SortWorldSpacePanelsByZOrder(100);
动态创建UI
GComponent view = UIPackage.CreateObject(“包名”, “组件名”).asCom;
//以下几种方式都可以将view显示出来:
//1,直接加到GRoot显示出来
GRoot.inst.AddChild(view);
//2,使用窗口方式显示
aWindow.contentPane = view;
aWindow.Show();
//3,加到其他组件里
aComponnent.AddChild(view);
//如果界面内容过多,创建时可能引起卡顿,FairyGUI提供了异步创建UI的方式,异步创建方式下,每帧消耗的CPU时间将
//受到控制,但创建时间也会比同步创建稍长一点
UIPackage.CreateObjectAsync("包名","组件名", MyCreateObjectCallback);
void MyCreateObjectCallback(GObject obj)
{
}
动态创建的界面不会自动销毁,例如一个背包窗口,你并不需要在每次过场景都销毁。如果要销毁界面,需要手工调用Dispose方法
view.Dispose();
UIConfig
UIConfig组件用于设置一些全局的参数
//配置字体
UIConfig.defaultFont
//配置垂直scroll
UIConfig.verticalScrollBar
//配置水平 scroll
UIConfig.horizontalScrollBar
// 配置常用弹窗方式
UIConfig.popupMenu
//配置 按钮声音
UIConfig.buttonSound