36.FGUI基础-Unity中的使用必备-组件拓展类
36.1 知识点
什么是组件类拓展
FairyGUI提供了绑定一个类为组件的扩展类的功能,让我们可以更加面向对象的进行编程。
回顾目前显示面板,处理面板逻辑的方式:
目前我们的面板并没有类与之对应专门处理该面板的逻辑,只是通过view面板获取它的子对象,然后处理子对象对应逻辑初始化或者事件监听,设置适配相关。
//设置适配相关
GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatchMode.MatchHeight);
//包和依赖包
UIPackage package = UIPackage.AddPackage("UI/Teach");
foreach (var item in package.dependencies)
{
UIPackage.AddPackage("UI/" + item["name"]);
}
//GComponent view = UIPackage.CreateObject("Teach", "TeachPanel").asCom;
//GRoot.inst.AddChild(view);
正常面向对象的思路应该是有一个类专门处理这个面板的逻辑。
组件类拓展可以将某一个面板的逻辑封装到指定类当中。
实现组件类拓展
创建MyPanel组件并发布
创建自定义类继承GComponent
public class MyPanel : GComponent
重写ConstructFromXML方法,在其中初始化面板相关控件。类中可以定义其他控件的成员。
//重写ConstructFromXML
public override void ConstructFromXML(XML xml)
{
base.ConstructFromXML(xml);
//在这里初始化 面板相关内容 比如获取某个控件 或者初始化面板显示 按钮监听等
//在面板创建时 会自动执行这里面的逻辑
inputTxt = this.GetChild("inputTxt").asTextInput;
btnTest = this.GetChild("btnTest").asButton;
btnTest.onClick.Add(() =>
{
Debug.Log("按钮点击");
});
}
在该类中处理面板逻辑。类中可以定义其他控件作为成员变量,封装成员方法。
//面板控件作为成员变量
public GTextInput inputTxt;
public GButton btnTest;
//成员方法 提供给外部
public void ShowInfo(string str)
{
inputTxt.text = str;
}
将自定义类和对应组件进行注册关联
//进行面板和自定义类的关系注册
UIObjectFactory.SetPackageItemExtension("ui://FGUI教程/MyPanel", typeof(MyPanel));
//由于我们注册了 所以我们在创建该面板时 他会自动和自定义类进行关联 用自定义类来装载它
MyPanel myPanel = (MyPanel)UIPackage.CreateObject("FGUI教程", "MyPanel").asCom;
GRoot.inst.AddChild(myPanel);
myPanel.ShowInfo("MyPanel哈哈");
FairyGUI编辑器导出代码功能
发布设置发布代码
- 允许发布代码 是否生成绑定的代码。生成绑定的代码可以更直观地访问组件的各个节点,但会造成美术工作和程序员工作的耦合。
- 包设置里也有允许发布代码的开关。如果这里不勾选,那么所有包都不会发布代码。如果这里勾选,那么由包设置的开关决定该包是否发布代码。
- 发布路径 发布的代码保存的路径。发布路径支持相对路径和绝对路径,也支持变量。
- 组件名前缀 给每个组件生成的类名加上前缀。例如如果组件名为“Component1”,这里设置前缀为“T”,那么最后生成的类名为“TComponent1”。前缀可以为空。注意,如果组件名是中文,会被自动转换为拼音。
- 成员名称前缀 给组件里每个元件的名称前加上前缀。例如如果元件名称为“n10”,这里设置前缀为“m_”,那么最后生成的类成员的名称为“m_n10”。前缀可以为空,但不建议这样做。因为元件名称很可能和类的一些属性和方法名称冲突。例如,如果元件名称为“icon”,那就和GObject的icon属性冲突了。
- 不生成使用默认名称的成员 勾选后,对于”n1”,”n2”等这种系统自动生成的名称,或者“title”,“icon”等这种扩展组件里约定的名称,将不会为这些名称的元件生成成员获取代码。如果一个组件里,全部都是这些名称的元件,那么整个组件都不会生成代码。例如,一个按钮,里面只有名称为“title”和“icon”的元件,则不会为这个按钮生成代码,因为使用基类GButton已经足够。
- 使用名称获取成员对象 如果不勾选,组件初始化时使用索引获得子对象;如果勾选,则使用名称获得子对象。前者效率高,推荐使用;后者则兼容性较好,例如,如果调整了元件的顺序,不会发生异常。
- 包名称 对于AS3代码,是指发布的代码的package;对于C#代码,是指发布的代码的namespace;对于Typscript代码,是指发布的代码的module;对于C++代码,是指发布的代码的namespace。
包设置发布代码
- 为本包生成代码 为本包生成代码。生成代码的作用请参考全局设置。注意,即使这个勾选了,如果全局设置里没有勾选,最后也不会生成代码。
- 发布路径 发布结果放置的路径。参考全局设置。
- 使用全局配置 如果勾选,发布路径使用全局配置里的设置,本页面的设置无效。
查看发布后的代码
- 在Binder方法中有帮我们自动绑定组件
- 也有自动生成控件成员并获取,并提供了一个CreateInstance方法让我们得到这个组件实例。使用绑定类创建UI的API是CreateInstance,不能直接new。
Unity中的使用
//在使用绑定类之前,一定要调用XXXBinder.BindAll,并且在创建任何UI之前调用。
FGUIJiaoChengBinder.BindAll();
//使用绑定类创建UI的API是CreateInstance,不能直接new。
UI_MyPanel uI_myPanel = UI_MyPanel.CreateInstance();
//添加到Groot
GRoot.inst.AddChild(uI_myPanel);
//要添加什么方法自行去生成代码类中的添加
uI_myPanel.ShowInfo("林文韬123");
运行结果
不要依赖自动发布的代码
注意:还是建议自己手写 不要依赖自动发布的代码 原因如下
- 要避免生成的代码 把现有的关键逻辑覆盖了 假如修改了组件 再重新发布 会把自己新加的逻辑覆盖
- 要注意生成的代码 控件名变化了
36.2 知识点代码
Lesson36_FGUI基础_Unity中的使用必备_组件拓展类
using FairyGUI;
using FairyGUI.Utils;
using FGUIJiaoCheng;
using System.Collections;
using System.Collections.Generic;
using Teach;
using UnityEngine;
public class Lesson36_FGUI基础_Unity中的使用必备_组件拓展类 : MonoBehaviour
{
void Start()
{
#region 知识点一 什么是组件类拓展?
//FairyGUI提供了绑定一个类为组件的扩展类的功能
//让我们可以更加面向对象的进行编程
//回顾目前显示面板,处理面板逻辑的方式
//目前我们的面板并没有类与之对应专门处理该面板的逻辑
//只是通过view面板获取它的子对象 然后处理子对象 对应逻辑 初始化 或者 事件监听
//设置适配相关
//GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatchMode.MatchHeight);
//包和依赖包
//UIPackage package = UIPackage.AddPackage("UI/Teach");
//foreach (var item in package.dependencies)
//{
// UIPackage.AddPackage("UI/" + item["name"]);
//}
//GComponent view = UIPackage.CreateObject("Teach", "TeachPanel").asCom;
//GRoot.inst.AddChild(view);
//正常面向对象的思路应该是有一个类专门处理这个面板的逻辑
//组件类拓展 可以将某一个面板的逻辑封装到指定类当中
#endregion
#region 知识点二 实现组件类拓展
//1.创建自定义类继承GComponent
//2.重写ConstructFromXML方法,在其中初始化面板相关控件
//3.在该类中处理面板逻辑
//4.将自定义类和对应组件进行注册关联UIObjectFactory.SetPackageItemExtension("组件URL地址", typeof(自定义类));这一步一定要再创建对应面板之前。
//基础包和组件面板的导入
//设置默认字体
UIConfig.defaultFont = "Other/STHUPO";
//设置超链接字体颜色
HtmlParseOptions.DefaultLinkColor = Color.red;
//基础包和组件面板的导入
//设置适配相关
GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatchMode.MatchHeight);
//当前包和依赖包的加载
UIPackage package = UIPackage.AddPackage("UI/FGUI教程");
foreach (var item in package.dependencies)
{
UIPackage.AddPackage("UI/" + item["name"]);
}
//设置按钮音效和音量
UIConfig.buttonSound = (NAudioClip)UIPackage.GetItemAssetByURL("ui://Teach/btnMusic");
UIConfig.buttonSoundVolumeScale = 0.5f;
//默认竖直滚动条 再FGUI全局默认设置的进unity不用代码设置会不生效 或者用UIConfig设置
UIConfig.verticalScrollBar = "ui://Teach/MyScrollBar3";
////创建组件对象 要设置为导出
//GComponent view = UIPackage.CreateObject("FGUI教程", "Lesson36_FGUI基础_Unity中的使用必备_组件拓展类").asCom;
////添加到根对象
//GRoot.inst.AddChild(view);
////进行面板和自定义类的关系注册
//UIObjectFactory.SetPackageItemExtension("ui://FGUI教程/MyPanel", typeof(MyPanel));
////由于我们注册了 所以我们在创建该面板时 他会自动和自定义类进行关联 用自定义类来装载它
//MyPanel myPanel = (MyPanel)UIPackage.CreateObject("FGUI教程", "MyPanel").asCom;
//GRoot.inst.AddChild(myPanel);
//myPanel.ShowInfo("MyPanel哈哈");
#endregion
#region 知识点三 FairyGUI编辑器导出代码功能
//在使用绑定类之前,一定要调用XXXBinder.BindAll,并且在创建任何UI之前调用。
FGUIJiaoChengBinder.BindAll();
//使用绑定类创建UI的API是CreateInstance,不能直接new。
UI_MyPanel uI_myPanel = UI_MyPanel.CreateInstance();
//添加到Groot
GRoot.inst.AddChild(uI_myPanel);
//要添加什么方法自行去生成代码类中的添加
uI_myPanel.ShowInfo("林文韬123");
//注意:还是建议自己手写 不要依赖自动发布的代码 原因如下
//1.要避免生成的代码 把现有的关键逻辑覆盖了 假如修改了组件 再重新发布 会把自己新加的逻辑覆盖
//2.要注意生成的代码 控件名变化了
#endregion
}
}
MyPanel
using FairyGUI;
using FairyGUI.Utils;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyPanel : GComponent
{
//面板控件作为成员变量
public GTextInput inputTxt;
public GButton btnTest;
//重写ConstructFromXML
public override void ConstructFromXML(XML xml)
{
base.ConstructFromXML(xml);
//在这里初始化 面板相关内容 比如获取某个控件 或者初始化面板显示 按钮监听等
//在面板创建时 会自动执行这里面的逻辑
inputTxt = this.GetChild("inputTxt").asTextInput;
btnTest = this.GetChild("btnTest").asButton;
btnTest.onClick.Add(() =>
{
Debug.Log("按钮点击");
});
}
//成员方法 提供给外部
public void ShowInfo(string str)
{
inputTxt.text = str;
}
}
FGUIJiaoChengBinder
/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
using FairyGUI;
namespace FGUIJiaoCheng
{
public class FGUIJiaoChengBinder
{
public static void BindAll()
{
UIObjectFactory.SetPackageItemExtension(UI_Lesson18_FGUIJiChu_JiChuYuanJian_ZhuangZaiQi_ZhuangZaiQi.URL, typeof(UI_Lesson18_FGUIJiChu_JiChuYuanJian_ZhuangZaiQi_ZhuangZaiQi));
UIObjectFactory.SetPackageItemExtension(UI_Lesson19_FGUIJiChu_JiChuYuanJian_ZhuangZaiQi_3DNeiRongZhuangZaiQi.URL, typeof(UI_Lesson19_FGUIJiChu_JiChuYuanJian_ZhuangZaiQi_3DNeiRongZhuangZaiQi));
UIObjectFactory.SetPackageItemExtension(UI_Lesson20_FGUIJiChu_KongJian_WenBen_PuTongWenBen.URL, typeof(UI_Lesson20_FGUIJiChu_KongJian_WenBen_PuTongWenBen));
UIObjectFactory.SetPackageItemExtension(UI_Lesson21_FGUIJiChu_KongJian_WenBen_ZiTiDeChuLi.URL, typeof(UI_Lesson21_FGUIJiChu_KongJian_WenBen_ZiTiDeChuLi));
UIObjectFactory.SetPackageItemExtension(UI_Lesson22_FGUIJiChu_KongJian_WenBen_FuWenBen.URL, typeof(UI_Lesson22_FGUIJiChu_KongJian_WenBen_FuWenBen));
UIObjectFactory.SetPackageItemExtension(UI_ExercisesPanel.URL, typeof(UI_ExercisesPanel));
UIObjectFactory.SetPackageItemExtension(UI_ExercisesBagPanel.URL, typeof(UI_ExercisesBagPanel));
UIObjectFactory.SetPackageItemExtension(UI_Lesson22_LianXiTi.URL, typeof(UI_Lesson22_LianXiTi));
UIObjectFactory.SetPackageItemExtension(UI_Lesson23_FGUIJiChu_KongJian_WenBen_ShuRuWenBen.URL, typeof(UI_Lesson23_FGUIJiChu_KongJian_WenBen_ShuRuWenBen));
UIObjectFactory.SetPackageItemExtension(UI_Lesson23_LianXiTi.URL, typeof(UI_Lesson23_LianXiTi));
UIObjectFactory.SetPackageItemExtension(UI_Lesson24_FGUIJiChu_KongJian_Zu.URL, typeof(UI_Lesson24_FGUIJiChu_KongJian_Zu));
UIObjectFactory.SetPackageItemExtension(UI_Lesson25_FGUIJiChu_KongJian_KongZhiQi.URL, typeof(UI_Lesson25_FGUIJiChu_KongJian_KongZhiQi));
UIObjectFactory.SetPackageItemExtension(UI_Lesson26_FGUIJiChu_KongJian_GuanLianXiTong.URL, typeof(UI_Lesson26_FGUIJiChu_KongJian_GuanLianXiTong));
UIObjectFactory.SetPackageItemExtension(UI_Lesson26_LianXiTi.URL, typeof(UI_Lesson26_LianXiTi));
UIObjectFactory.SetPackageItemExtension(UI_Lesson27_FGUIJiChu_KongJian_BiaoQian.URL, typeof(UI_Lesson27_FGUIJiChu_KongJian_BiaoQian));
UIObjectFactory.SetPackageItemExtension(UI_Lesson28_FGUIJiChu_KongJian_AnNiu_PuTongAnNiu.URL, typeof(UI_Lesson28_FGUIJiChu_KongJian_AnNiu_PuTongAnNiu));
UIObjectFactory.SetPackageItemExtension(UI_Lesson28_LianXiTi.URL, typeof(UI_Lesson28_LianXiTi));
UIObjectFactory.SetPackageItemExtension(UI_Lesson29_FGUIJiChu_KongJian_AnNiu_DanXuanAnNiuHeFuXuanAnNiu.URL, typeof(UI_Lesson29_FGUIJiChu_KongJian_AnNiu_DanXuanAnNiuHeFuXuanAnNiu));
UIObjectFactory.SetPackageItemExtension(UI_Lesson29_LianXiTi.URL, typeof(UI_Lesson29_LianXiTi));
UIObjectFactory.SetPackageItemExtension(UI_Lesson13_FGUIJiChu_JiChuYuanJian_YuanJian.URL, typeof(UI_Lesson13_FGUIJiChu_JiChuYuanJian_YuanJian));
UIObjectFactory.SetPackageItemExtension(UI_Lesson14_FGUIJiChu_JiChuYuanJian_TuPian.URL, typeof(UI_Lesson14_FGUIJiChu_JiChuYuanJian_TuPian));
UIObjectFactory.SetPackageItemExtension(UI_Lesson15_FGUIJiChu_JiChuYuanJian_TuXing.URL, typeof(UI_Lesson15_FGUIJiChu_JiChuYuanJian_TuXing));
UIObjectFactory.SetPackageItemExtension(UI_Lesson16_FGUIJiChu_JiChuYuanJian_DongHua_XuLieZhenDongHua.URL, typeof(UI_Lesson16_FGUIJiChu_JiChuYuanJian_DongHua_XuLieZhenDongHua));
UIObjectFactory.SetPackageItemExtension(UI_Lesson30_FGUIJiChu_KongJian_JinDuTiao.URL, typeof(UI_Lesson30_FGUIJiChu_KongJian_JinDuTiao));
UIObjectFactory.SetPackageItemExtension(UI_Lesson31_FGUIJiChu_KongJian_HuaDongTiao.URL, typeof(UI_Lesson31_FGUIJiChu_KongJian_HuaDongTiao));
UIObjectFactory.SetPackageItemExtension(UI_Lesson31_LianXiTi.URL, typeof(UI_Lesson31_LianXiTi));
UIObjectFactory.SetPackageItemExtension(UI_Lesson33_FGUIJiChu_KongJian_GunDongRongQi.URL, typeof(UI_Lesson33_FGUIJiChu_KongJian_GunDongRongQi));
UIObjectFactory.SetPackageItemExtension(UI_Lesson33_LianXiTi.URL, typeof(UI_Lesson33_LianXiTi));
UIObjectFactory.SetPackageItemExtension(UI_Lesson33_LianXiTiBeiBaoMianBan.URL, typeof(UI_Lesson33_LianXiTiBeiBaoMianBan));
UIObjectFactory.SetPackageItemExtension(UI_Lesson34_FGUIJiChu_KongJian_LieBiao.URL, typeof(UI_Lesson34_FGUIJiChu_KongJian_LieBiao));
UIObjectFactory.SetPackageItemExtension(UI_Lesson34_LianXiTi.URL, typeof(UI_Lesson34_LianXiTi));
UIObjectFactory.SetPackageItemExtension(UI_Lesson34_LianXiTiBeiBaoMianBan.URL, typeof(UI_Lesson34_LianXiTiBeiBaoMianBan));
UIObjectFactory.SetPackageItemExtension(UI_Lesson35_FGUIJiChu_KongJian_XiaLaKuang.URL, typeof(UI_Lesson35_FGUIJiChu_KongJian_XiaLaKuang));
UIObjectFactory.SetPackageItemExtension(UI_MyComboBox_popup.URL, typeof(UI_MyComboBox_popup));
UIObjectFactory.SetPackageItemExtension(UI_MyComboBox2_popup.URL, typeof(UI_MyComboBox2_popup));
UIObjectFactory.SetPackageItemExtension(UI_MyPanel.URL, typeof(UI_MyPanel));
UIObjectFactory.SetPackageItemExtension(UI_ControllerTest.URL, typeof(UI_ControllerTest));
UIObjectFactory.SetPackageItemExtension(UI_MyComboBox2_popup.URL, typeof(UI_MyComboBox2_popup));
UIObjectFactory.SetPackageItemExtension(UI_TreeNode.URL, typeof(UI_TreeNode));
UIObjectFactory.SetPackageItemExtension(UI_Lesson37_FGUIJiChu_UnityZhongDeShiYongBiBei_FenBianLvZiShiYing.URL, typeof(UI_Lesson37_FGUIJiChu_UnityZhongDeShiYongBiBei_FenBianLvZiShiYing));
}
}
}
UI_MyPanel
/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
using FairyGUI;
using FairyGUI.Utils;
using UnityEngine;
namespace FGUIJiaoCheng
{
public partial class UI_MyPanel : GComponent
{
public Controller m_RadioGroup;
public Controller m_c1;
public GImage m_imgTest;
public GGraph m_graphTest;
public GGraph m_graphTest2;
public GMovieClip m_movieClip;
public GLoader m_loader1;
public GLoader3D m_3dLoader;
public GTextField m_txtInfo2;
public GTextField m_txtInfo;
public GRichTextField m_richTxt1;
public GTextInput m_inputTxt;
public GGroup m_group1;
public UI_ControllerTest m_controllerTest;
public GLabel m_myLabel;
public GButton m_btnTest;
public GButton m_checkBox1;
public GButton m_checkBox2;
public GButton m_radioBox1;
public GImage m_page1;
public GImage m_page2;
public GImage m_page3;
public GProgressBar m_pbTest;
public GSlider m_sliderTest;
public GComponent m_svTest;
public GList m_myList;
public GComboBox m_comboBoxTest;
public GGraph m_pos3D;
public GGraph m_click3D;
public GTree m_tree;
public Transition m_Test;
public const string URL = "ui://c8d1gzdoxu9p5d";
public static UI_MyPanel CreateInstance()
{
return (UI_MyPanel)UIPackage.CreateObject("FGUI教程", "MyPanel");
}
public override void ConstructFromXML(XML xml)
{
base.ConstructFromXML(xml);
m_RadioGroup = GetController("RadioGroup");
m_c1 = GetController("c1");
m_imgTest = (GImage)GetChild("imgTest");
m_graphTest = (GGraph)GetChild("graphTest");
m_graphTest2 = (GGraph)GetChild("graphTest2");
m_movieClip = (GMovieClip)GetChild("movieClip");
m_loader1 = (GLoader)GetChild("loader1");
m_3dLoader = (GLoader3D)GetChild("3dLoader");
m_txtInfo2 = (GTextField)GetChild("txtInfo2");
m_txtInfo = (GTextField)GetChild("txtInfo");
m_richTxt1 = (GRichTextField)GetChild("richTxt1");
m_inputTxt = (GTextInput)GetChild("inputTxt");
m_group1 = (GGroup)GetChild("group1");
m_controllerTest = (UI_ControllerTest)GetChild("controllerTest");
m_myLabel = (GLabel)GetChild("myLabel");
m_btnTest = (GButton)GetChild("btnTest");
m_checkBox1 = (GButton)GetChild("checkBox1");
m_checkBox2 = (GButton)GetChild("checkBox2");
m_radioBox1 = (GButton)GetChild("radioBox1");
m_page1 = (GImage)GetChild("page1");
m_page2 = (GImage)GetChild("page2");
m_page3 = (GImage)GetChild("page3");
m_pbTest = (GProgressBar)GetChild("pbTest");
m_sliderTest = (GSlider)GetChild("sliderTest");
m_svTest = (GComponent)GetChild("svTest");
m_myList = (GList)GetChild("myList");
m_comboBoxTest = (GComboBox)GetChild("comboBoxTest");
m_pos3D = (GGraph)GetChild("pos3D");
m_click3D = (GGraph)GetChild("click3D");
m_tree = (GTree)GetChild("tree");
m_Test = GetTransition("Test");
m_btnTest.onClick.Add(() =>
{
Debug.Log("发布生成的代码" + "按钮点击");
});
}
//成员方法 提供给外部
public void ShowInfo(string str)
{
m_inputTxt.text = "发布生成的代码" + str;
}
}
}
36.3 练习题
在之前练习题的基础上,利用组件拓展类整理之前完成的练习题面板相关功能
设置整合所有练习题的面板,发布代码 找到对应的类ExercisesPanel
整合所有练习题逻辑,把之前写的Exercises代码的逻辑剪切到ExercisesPanel中 整理逻辑 修改命名
在Exercises处理注册逻辑和设置玩家逻辑
//一定要先注册
TeachBinder.BindAll();
//再显示
ExercisesPanel panel = ExercisesPanel.CreateInstance();
//再添加
GRoot.inst.AddChild(panel);
//关联玩家
panel.SetPlayer(player);
把背包相关的逻辑丢到背包面中,练习题面板只负责背包按钮点击打开背包面板
public partial class ExercisesBagPanel : GComponent
{
public GList m_svTest;
public GButton m_btnBack;
public const string URL = "ui://wrs19joe5b993r";
public static ExercisesBagPanel CreateInstance()
{
return (ExercisesBagPanel)UIPackage.CreateObject("Teach", "ExercisesBagPanel");
}
public override void ConstructFromXML(XML xml)
{
base.ConstructFromXML(xml);
m_svTest = (GList)GetChildAt(3);
m_btnBack = (GButton)GetChildAt(4);
m_svTest.itemRenderer = RenderItem;
m_svTest.SetVirtual();
m_svTest.numItems = 50;
m_btnBack.onClick.Add(()=> {
//隐藏背包面板
UIManager.Instance.HidePanel<ExercisesBagPanel>();
});
}
private void RenderItem(int index, GObject obj)
{
//在这里面对每一个item进行初始化操作
}
}
36.4 练习题代码
Exercises
using FairyGUI;
using FairyGUI.Utils;
using System.Collections;
using System.Collections.Generic;
using Teach;
using UnityEngine;
public class Exercises : MonoBehaviour
{
public Player player;
void Start()
{
UIConfig.defaultFont = "Other/STHUPO";
HtmlParseOptions.DefaultLinkColor = Color.red;
//设置适配相关
GRoot.inst.SetContentScaleFactor(1365, 768, UIContentScaler.ScreenMatchMode.MatchHeight);
//包和依赖包的加载
UIPackage package = UIPackage.AddPackage("UI/Teach");
foreach (var item in package.dependencies)
{
UIPackage.AddPackage(item["name"]);
}
//设置默认按钮音效
UIConfig.buttonSound = (NAudioClip)UIPackage.GetItemAssetByURL("ui://Teach/btnMusic");
//设置默认按钮音效大小
UIConfig.buttonSoundVolumeScale = 0.5f;
//一定要先注册
TeachBinder.BindAll();
//再显示
ExercisesPanel panel = ExercisesPanel.CreateInstance();
//再添加
GRoot.inst.AddChild(panel);
//关联玩家
panel.SetPlayer(player);
}
public static void ClickLinkOpenPanel(EventContext eventData)
{
string info = eventData.data.ToString();
switch (info)
{
case "1":
print("打开任务面板");
break;
case "2":
print("打开装备面板");
break;
case "3":
print("打开PVP面板");
break;
case "4":
print("打开商店面板");
break;
default:
print("数据未知");
break;
}
}
}
ExercisesPanel
/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
using FairyGUI;
using FairyGUI.Utils;
namespace Teach
{
public partial class ExercisesPanel : GComponent
{
public Controller m_RadioGroup;
public GRichTextField m_richTxt1;
public GRichTextField m_richTxt2;
public GTextInput m_inputTxt;
public GTextField m_txtInfo;
public GTextField m_txtName;
public GButton m_btnFire;
public GButton m_checkBoxMusic;
public GButton m_radioBoxOpen;
public GButton m_radioBoxClose;
public GSlider m_soundSlider;
public GButton m_btnBag;
public const string URL = "ui://wrs19joehkfz2s";
private Player player;
public static ExercisesPanel CreateInstance()
{
return (ExercisesPanel)UIPackage.CreateObject("Teach", "ExercisesPanel");
}
public override void ConstructFromXML(XML xml)
{
base.ConstructFromXML(xml);
m_RadioGroup = GetControllerAt(0);
m_richTxt1 = (GRichTextField)GetChildAt(0);
m_richTxt2 = (GRichTextField)GetChildAt(1);
m_inputTxt = (GTextInput)GetChildAt(3);
m_txtInfo = (GTextField)GetChildAt(4);
m_txtName = (GTextField)GetChildAt(7);
m_btnFire = (GButton)GetChildAt(15);
m_checkBoxMusic = (GButton)GetChildAt(16);
m_radioBoxOpen = (GButton)GetChildAt(17);
m_radioBoxClose = (GButton)GetChildAt(18);
m_soundSlider = (GSlider)GetChildAt(19);
m_btnBag = (GButton)GetChildAt(20);
m_richTxt1.onClickLink.Add(Exercises.ClickLinkOpenPanel);
m_richTxt2.onClickLink.Add(Exercises.ClickLinkOpenPanel);
//输入文本练习题相关
m_inputTxt.onChanged.Add(() =>
{
//让文本控件的内容和输入的内容一致
m_txtInfo.text = m_inputTxt.text;
});
m_btnFire.onClick.Add(() =>
{
player.Fire();
});
m_checkBoxMusic.onChanged.Add(() =>
{
if (m_checkBoxMusic.selected)
GRoot.inst.EnableSound();
else
GRoot.inst.DisableSound();
});
Controller c = this.GetController("RadioGroup");
c.onChanged.Add(() =>
{
if (c.selectedIndex == 0)
GRoot.inst.EnableSound();
else
GRoot.inst.DisableSound();
});
m_soundSlider.onChanged.Add(() => {
GRoot.inst.soundVolume = (float)m_soundSlider.value;
});
m_btnBag.onClick.Add(() =>
{
ExercisesBagPanel bagPanel = ExercisesBagPanel.CreateInstance();
GRoot.inst.AddChild(bagPanel);
});
}
public void SetPlayer(Player player)
{
this.player = player;
}
}
}
ExercisesBagPanel
/** This is an automatically generated class by FairyGUI. Please do not modify it. **/
using FairyGUI;
using FairyGUI.Utils;
namespace Teach
{
public partial class ExercisesBagPanel : GComponent
{
public GList m_svTest;
public const string URL = "ui://wrs19joe5b993r";
public static ExercisesBagPanel CreateInstance()
{
return (ExercisesBagPanel)UIPackage.CreateObject("Teach", "ExercisesBagPanel");
}
public override void ConstructFromXML(XML xml)
{
base.ConstructFromXML(xml);
m_svTest = (GList)GetChildAt(3);
//for (int i = 0; i < 50; i++)
//{
// //方式一:
// //GObject img = UIPackage.CreateObject("Teach", "quanlity_3");
// //m_svTest.AddChild(img);
// //方式二:(建议使用)
// //创建从缓存池中取 之后 移除时 也用对应方法 放入缓存池 这样更加节约性能
// m_svTest.AddItemFromPool();
//}
//方式三:
m_svTest.itemRenderer = RenderItem;
//如果要显示的内容对象多 那么可以设置为虚拟列表
m_svTest.SetVirtual();
m_svTest.numItems = 50;
}
private void RenderItem(int index, GObject obj)
{
//在这里面对每一个item进行初始化操作
}
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com