用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用FairyGUI (二)

上次讲解了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";

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyfgsg.html