继上次分析了热更新的Demo后,这次来介绍如何在热更新代码中使用MonoBehaviour。

MonoBehaviour挂载到GameObject对象上的脚本的基类。平常Unity开发时,简单的做法就是编写一个继承自MonoBehaviour的脚本,将它挂载到要操纵的GameObject上,赋予它各种行为。

当然,在某些大型项目中,可能并不推荐导出挂脚本的方式,但是本文旨在介绍如何在脚本中继承并编写MonoBehaviour,暂时忽略这个问题。

本章的目标:

用脚本创建一个MonoBehaviour。并挂载到某个物体上,在Start方法中使用协程加载 baidu 的首页的html,然后将它的html代码显示到文本框上。

操作步骤:

  1. 新建一个Unity热更新项目,或者打开上次的项目。如果您不知道怎么新建,参考上一篇文章或者看官网
  2. 打开HotFixDemoScene1,将文本框改大。
  3. 打开热更新项目。
  4. 如果您使用的是Unity2017.2以后的版本,需要注意以下问题:UnityEngine.WWW这个类用于从网络下载数据。但是自从Unity2017.2之后,Unity将它的API拆分到了许多其他dll中。默认系统只将UnityEngine.CoreModule.dll的API导出了,但是UnityEngine.WWW并没有包含在这个dll里。
    1. 可以使用如下办法,来确定某个类在哪个dll里:在VS中,写下要确定的这个类的名字。
    2. 右键点击刚才写的类名,在弹出菜单中选择速览定义,即可查看到这个类型所在的dll。
    3. 这里我们定位到在UnityEngine.UnityWebRequestWWWModule.dll中
    4. 打开热更项目的genapi.config.xml,将这个dll配置到以下配置节中:
      <!--Configure DLLs to export-->
      <buildassemblys> <assembly value="D:\Program Files\Unity\Editor\Data\Mono\lib\mono\2.0\System.dll"></assembly>
      <assembly value="D:\Program Files\Unity\Editor\Data\Managed\UnityEngine\UnityEngine.CoreModule.dll"></assembly>
      <assembly value="D:\Program Files\Unity\Editor\Data\Managed\UnityEngine\UnityEngine.UnityWebRequestWWWModule.dll"></assembly>
      <assembly value="D:\Program Files\Unity\Editor\Data\UnityExtensions\Unity\GUISystem\UnityEngine.UI.dll"></assembly> <assembly value="F:/ASTool_UnityTest/AS3HotFix_WWW\Library\ScriptAssemblies\Assembly-CSharp.dll"></assembly> </buildassemblys>
    5. 执行 bat/CreateUnityAPI.bat ,再次生成Unity的API。如此,即可在热更新项目中使用WWW相关的类型
  5. 打开热更新项目的 Main.as。
  6. 本次我们将功能写在包外代码内,因此将Main类型的代码清空,然后贴下如下代码:
     package
    { [Doc]
    /**
    * ...
    * @author
    */
    public class Main
    { public function Main()
    {
    } public function update():void
    { }
    } } //写在包外的代码,会在Main这个类第一次被实例化之前执行一次。 import system.collections.IEnumerator;
    import unityengine.Camera;
    import unityengine.GameObject;
    import unityengine.MonoBehaviour;
    import unityengine.Time;
    import unityengine.WWW;
    import unityengine.ui.Text; //定义一个继承自MonoBehaviour的类型。
    class baidutest extends MonoBehaviour
    {
    //Start方法会在Update前调用一次。
    function Start():IEnumerator
    {
    //创建WWW对象,并访问 www.baidu.com
    var www:WWW = new WWW("http://www.baidu.com");
    while ( !www.isDone)
    {
    //更新UI元素.
    Text( GameObject.find("Text").getComponent(Text)).text = "loading from baidu " + Time.frameCount;
    //使用 yield关键字,可以使用Unity协程
    yield return www;
    } //加载完毕后,将html内容显示到UI上。
    Text( GameObject.find("Text").getComponent(Text)).text = www.text.substr(1024,1024);
    //销毁WWW对象。
    www.dispose(); } } //在主相机上挂载脚本中定义的baidutest。
    Camera.main.gameObject.addComponent(baidutest);
  7. 见注释,我们直接在脚本中定义一个MonoBehaviour的子类,并且挂载到了相机上。
  8. 执行结果:

如此,即实现了在脚本中使用MonoBehaviour。

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1l1wacrkzlbqn

用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 在脚本中使用MonoBehaviour的更多相关文章

  1. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新

    unity热更新是一个经久不衰的话题.除了最常见的lua之外,还有如JSBinding,C#等等.这里介绍一个使用ECMAScript4进行热更新的方案.它吸收了各家的优点,特色很鲜明. 项目地址: ...

  2. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用原型链和EventTrigger

    原型链是JS的必备,作为ECMAScript4,原型链也是支持的. 特别说明,ActionScript3是支持完整的面向对象继承支持的,原型链只在某些非常特殊的情况下使用. 本文旨在介绍如何使用原型链 ...

  3. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- Demo分析

    如何创建工程 下载最新的Unity发布插件包. 打开Unity,新建一个项目 将插件包导入 在菜单中点击ASRuntime/Create ActionScript3 FlashDevelop HotF ...

  4. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用第三方组件

    Unity开发中,常常会用到一些第三方组件.本文以实例介绍如何在热更新脚本中使用这些第三方组件. 首先说明几个基本步骤: 第三方组件通常是以dll或者源码方式提供的,它们本身往往无法热更. 我们在脚本 ...

  5. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- CustomYieldInstruction 自定义中断指令

    ActionScript3脚本引擎为了方便热更新逻辑开发,提供的从脚本继承Unity类库功能在一些情况下可以提供开发的便利. 这次来建立一个示例,演示一下如何在脚本中自定义协程中断指令 Unity中的 ...

  6. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用FairyGUI (一)

    我们的热更新脚本在实际使用中,当然也要支持常用的第三方组件,例如这里介绍一个非常实用的第三方UI库:FairyGUI. 什么是FairyGUI 这里照搬FaiyGUI官网的介绍: 重新定义 UI 制作 ...

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

    上次讲解了FairyGUI的最简单的热更新办法,并对其中一个Demo进行了修改并做成了热更新的方式. 这次我们来一个更加复杂一些的情况:Emoji. FairyGUI的   Example 04 - ...

  8. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 热更新Live2D

    live2D是一个很强大的2D动画组件.我们可以使用AS3脚本对它进行热更新. live2D在Unity中的使用请看这里: 如何获取Live2D 总得来说,我们可以先去live2D官网下载它的Unit ...

  9. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 操作符重载和隐式类型转换

    C#中,某些类型会定义隐式类型转换和操作符重载.Unity中,有些对象也定义了隐式类型转换和操作符重载.典型情况有:UnityEngine.Object.UnityEngine.Object的销毁是调 ...

随机推荐

  1. Hibernate学习(2)- hibernate.cfg.xml详解

    1:主配置文件主要分为三部分: 注意:通常情况下,一个session-factory节点代表一个数据库: 1.1:第一部分 数据库连接部分,注意"hibernate.connection.d ...

  2. 介绍C语言指针

    最近心态不太好,但是还是控制自己刷一下算法题,但是看着多次出现的 “Segmentation fault”,心态又爆炸啦.我只想说:“我也早觉得有写一点东西的必要了.离三月十八日也已有两星期,忘却的救 ...

  3. Android 的消息队列模型

    Android 的消息队列模型 Android是参考Windows的消息循环机制来实现Android自身的消息循环的.    Android通过Looper.Handler来实现消息循环机制,Andr ...

  4. redis 相关知识

    1. 什么是Redis Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库.Redis全称为:Remote Dictionary Ser ...

  5. Jquery精妙的自定义事件

    对于jQuery自定义事件,很多JavaScript开发者都会有所疑惑:在日常开发过程中会不会用到呢?而本文将结合一个开发案例,其中的一些地方应用到了jQuery的自定义事件,而且达到了很好的效果-精 ...

  6. 在Python中进行JSON转化

    序列化,指的是把内存中的变量(如类的实例)变成可存储或可传输的过程. JSON(JavaScript Object Notation, JavaScript对象表示)是网络传输中经常使用的一种数据形式 ...

  7. IntelliJ IDEA的入门使用

    1 修改背景颜色 点击File,Settings 2 修改字体格式,以及字体大小 我个人习惯Eclipse的默认字体,所有把字体修改成Eclipse默认的Consolas 同上点击File,Setti ...

  8. Hive 报错:java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient

    在配置好hive后启动报错信息如下: [walloce@bigdata-study- hive--cdh5.3.6]$ bin/hive Logging initialized using confi ...

  9. B-day5

    1.昨天的困难,今天解决的进度,以及明天要做的事情 昨天的困难:昨天虽然完成了风险数据的图表统计,但是界面风格仍然不太满意,还在抓紧调试中:还有登录页的背景图,在想应该如何设计, 什么样的风格才好. ...

  10. Python 远程部署 Fabric

    参考文章:http://zmrenwu.com/post/21/ Fabric是一个Python的库,它提供了丰富的同SSH交互的接口,可以用来在本地或远程机器上自动化.流水化地执行Shell命令.因 ...