上次讲解了FairyGUI的最简单的热更新办法,并对其中一个Demo进行了修改并做成了热更新的方式。
这次我们来一个更加复杂一些的情况:Emoji.
FairyGUI的 Example 04 - Emoji
场景是一个聊天对话框。玩家可以输入文本和表情,对面的机器人还会回复一句话。回复的对话中还附带一个表情。
Demo分析FairyGUI的这个Demo展示了如下技巧:
继承UBBParser ,在Demo中使用自定义的表情。
编写了一个MonoBehaviour,管理所有的逻辑。
动态添加UI项目的各按钮的点击事件
保存对话内容
根据对话的类型(发送方和接收方),可以给对话项提供不同的展示资源
脚本中解析表情,并展示出来。
当对话条数超过一定数目时,会自动从头部移除最早的对话。
修改为热更新本次热更新的尝试目标,所有逻辑全部移动到热更新代码中执行。
首先我们将这个场景另存为F_Emoji。
导入ActionScript3 虚拟机的unity插件包,并生成热更新项目。如果您不知道怎么操作,可以查看这里
ActionScript3插件包已更新,请下载最新的插件包 v0.96f6 以及以后版本。
现在准备工作已完成。
我们将场景中的UIPanel直接删除。我们全部使用脚本来创建这个Panel。
进入Assets->ASRuntimePlayer,将 AS3Player预设和AS3StartupProgress预设拖到场景上。
将AS3Player物件下的Action Script Start Up 脚本组件的Document Class 设置为EmojiTest。
(这一步的作用表示指示脚本解释器启动时,具体创建一个哪种类型的实例)
现在打开热更新项目,新建一个 EmojiTest 的类。
现在我们首先来说明,如何使用热更新脚本来创建UIPanel。
根据FairyGUI的说明,要从脚本创建UIPanel,则一定要先注册UI所在的包,否则会提示创建失败
原C# Demo中,注册代码是在Awake事件中,并且设计时就拖动到场景上的,而我们这里需要热更新,我们可以选择在EmojiTest的构造函数中,或者直接在包外代码中写入注册代码,如下:
//务必先加入package UIPackage.addPackage______("UI/Emoji"); var go:GameObject = new GameObject("uip"); var uip:UIPanel = go.addComponent(UIPanel) as UIPanel; uip.gameObject.layer = LayerMask.nameToLayer("UI"); uip.packageName = "Emoji"; uip.componentName = "Main";