继上次分析了热更新的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. iOS开发--动画(Animation)总结

    UIView的,翻转.旋转,偏移,翻页,缩放,取反的动画效果   翻转的动画 //开始动画 [UIView beginAnimations:@"doflip" context:ni ...

  2. TCP/UDP基本概念部分

    最近在读<Unix网络编程>和<TCP/IP详解>两本书,有了一些自己的心得与体会,总结下其中典型的问题. 1. 为什么建立连接需要三次握手? 谢希仁的<计算机网络> ...

  3. 加密传输SSL协议6_验证公钥

    如上图所示,我怎么能确定我手里的公钥就是我心中的接收方的公钥呢?怎么防止被钓鱼呢? 解决的办法就是引入一个第三方,一个权威机构,一个我们都相信的机构. 验证公钥,Digital Certificate ...

  4. Appnium-API-Status

    Status Java:// TODO Python:selenium.webdriver.common.utils.is_url_connectable(port) Description Retu ...

  5. C++将十进制数转化为二进制

    #include<iostream> using namespace std; void main() { ; ]; cin>>n; i=n; while(i) { a[j]= ...

  6. 如何利用sql 读取辅表的最大max 和第二最大max。。。。

    SELECT `主表`.id, `主表`.title, `辅表`.* FROM tableB AS `辅表` INNER JOIN tableA AS `主表` ON `主表`.id = `辅表`.f ...

  7. LeetCode – Smallest Rotation with Highest Score

    Given an array A, we may rotate it by a non-negative integer K so that the array becomes A[K], A[K+1 ...

  8. 【探路者】Beta发布用户使用报告

    用户数量:18 一.用户列表及评论.  用户序号 用户来源 用户下载软件途径 用户姓名 用户描述(信息) 使用次数 用户评价 1  张恩聚  QQ发送可运行jar包  周楠  吉林大学在读研究生  5 ...

  9. Delphi从Internet下载文件

    Delphi从Internet下载文件   今天在做拍卖系统的时候,因考虑到网络状况问题,需要将拍品所有信息下载到本机,包括拍品图片,因此需要实现从Internet下载文件的功能.      下面是代 ...

  10. 洛谷 P1570 KC喝咖啡【二分答案/最大化平均值模板】

    题目描述 话说KC和SH在福州的时候常常跑去85°C喝咖啡或者其他的一些什么东西. 这天,KC想要喝一杯咖啡,服务员告诉他,现在有n种调料,这杯咖啡只可以加入其中的m种(当然KC一定会加入m种,不会加 ...