用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 在脚本中使用MonoBehaviour
继上次分析了热更新的Demo后,这次来介绍如何在热更新代码中使用MonoBehaviour。
MonoBehaviour挂载到GameObject对象上的脚本的基类。平常Unity开发时,简单的做法就是编写一个继承自MonoBehaviour的脚本,将它挂载到要操纵的GameObject上,赋予它各种行为。
当然,在某些大型项目中,可能并不推荐导出挂脚本的方式,但是本文旨在介绍如何在脚本中继承并编写MonoBehaviour,暂时忽略这个问题。
本章的目标:
用脚本创建一个MonoBehaviour。并挂载到某个物体上,在Start方法中使用协程加载 baidu 的首页的html,然后将它的html代码显示到文本框上。
操作步骤:
- 新建一个Unity热更新项目,或者打开上次的项目。如果您不知道怎么新建,参考上一篇文章或者看官网
 - 打开HotFixDemoScene1,将文本框改大。

 - 打开热更新项目。
 - 如果您使用的是Unity2017.2以后的版本,需要注意以下问题:UnityEngine.WWW这个类用于从网络下载数据。但是自从Unity2017.2之后,Unity将它的API拆分到了许多其他dll中。默认系统只将UnityEngine.CoreModule.dll的API导出了,但是UnityEngine.WWW并没有包含在这个dll里。
- 可以使用如下办法,来确定某个类在哪个dll里:在VS中,写下要确定的这个类的名字。
 - 右键点击刚才写的类名,在弹出菜单中选择速览定义,即可查看到这个类型所在的dll。

 - 这里我们定位到在UnityEngine.UnityWebRequestWWWModule.dll中
 - 打开热更项目的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> - 执行 bat/CreateUnityAPI.bat ,再次生成Unity的API。如此,即可在热更新项目中使用WWW相关的类型
 
 - 打开热更新项目的 Main.as。
 - 本次我们将功能写在包外代码内,因此将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); - 见注释,我们直接在脚本中定义一个MonoBehaviour的子类,并且挂载到了相机上。
 - 执行结果:

 
如此,即实现了在脚本中使用MonoBehaviour。
我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1l1wacrkzlbqn
用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 在脚本中使用MonoBehaviour的更多相关文章
- 用ECMAScript4 ( ActionScript3)  实现Unity的热更新
		
unity热更新是一个经久不衰的话题.除了最常见的lua之外,还有如JSBinding,C#等等.这里介绍一个使用ECMAScript4进行热更新的方案.它吸收了各家的优点,特色很鲜明. 项目地址: ...
 - 用ECMAScript4 ( ActionScript3)  实现Unity的热更新 -- 使用原型链和EventTrigger
		
原型链是JS的必备,作为ECMAScript4,原型链也是支持的. 特别说明,ActionScript3是支持完整的面向对象继承支持的,原型链只在某些非常特殊的情况下使用. 本文旨在介绍如何使用原型链 ...
 - 用ECMAScript4 ( ActionScript3)  实现Unity的热更新 -- Demo分析
		
如何创建工程 下载最新的Unity发布插件包. 打开Unity,新建一个项目 将插件包导入 在菜单中点击ASRuntime/Create ActionScript3 FlashDevelop HotF ...
 - 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用第三方组件
		
Unity开发中,常常会用到一些第三方组件.本文以实例介绍如何在热更新脚本中使用这些第三方组件. 首先说明几个基本步骤: 第三方组件通常是以dll或者源码方式提供的,它们本身往往无法热更. 我们在脚本 ...
 - 用ECMAScript4 ( ActionScript3)  实现Unity的热更新 -- CustomYieldInstruction 自定义中断指令
		
ActionScript3脚本引擎为了方便热更新逻辑开发,提供的从脚本继承Unity类库功能在一些情况下可以提供开发的便利. 这次来建立一个示例,演示一下如何在脚本中自定义协程中断指令 Unity中的 ...
 - 用ECMAScript4 ( ActionScript3)  实现Unity的热更新 -- 使用FairyGUI (一)
		
我们的热更新脚本在实际使用中,当然也要支持常用的第三方组件,例如这里介绍一个非常实用的第三方UI库:FairyGUI. 什么是FairyGUI 这里照搬FaiyGUI官网的介绍: 重新定义 UI 制作 ...
 - 用ECMAScript4 ( ActionScript3)  实现Unity的热更新 -- 使用FairyGUI (二)
		
上次讲解了FairyGUI的最简单的热更新办法,并对其中一个Demo进行了修改并做成了热更新的方式. 这次我们来一个更加复杂一些的情况:Emoji. FairyGUI的 Example 04 - ...
 - 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 热更新Live2D
		
live2D是一个很强大的2D动画组件.我们可以使用AS3脚本对它进行热更新. live2D在Unity中的使用请看这里: 如何获取Live2D 总得来说,我们可以先去live2D官网下载它的Unit ...
 - 用ECMAScript4 ( ActionScript3)  实现Unity的热更新 -- 操作符重载和隐式类型转换
		
C#中,某些类型会定义隐式类型转换和操作符重载.Unity中,有些对象也定义了隐式类型转换和操作符重载.典型情况有:UnityEngine.Object.UnityEngine.Object的销毁是调 ...
 
随机推荐
- SpringMvc环境搭建(配置文件)
			
在上面的随笔里已经把搭建springmvc环境的基本需要的包都下下来了,拉下来就是写配置文件了. 下面左图是总的结构,右图是增加包 一.最开始当然是web.xml文件了,这是一个总的宏观配置 < ...
 - 在Anacoda中管理多个版本Python
			
win10. 在cmd窗口中输入 conda info --envs 或者 conda env list 查看已经安装的环境,当前活动的环境前会加*号. 在cmd窗口(终端窗口)或anaconda p ...
 - JVM学习八:常用JVM配置参数
			
前面学习的都是和类加载相关的知识,接下来学习的则和GC相关的知识,都是JVM的几个重点块. 零.在IDE的后台打印GC日志: 既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技能,它只是 ...
 - 小程序之Tab切换(二)
			
之前写的那个Tab切换是常规逻辑写的,接下来我会列出小程序api自带的写法,当然了 这个写法更加简单,实用.我们只需要配置app.json这个文件即可. 先看效果图: app.json代码:(有木有感 ...
 - Struts2学习笔记五 拦截器
			
拦截器,在AOP中用于在某个方法或字段被访问之前,进行拦截,然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. Struts2中,拦截器是动态拦截Action调用的对象.它提供了一种机制可以使 ...
 - 【iOS】Swift  ?和 !(详解)
			
Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值, 也就是说变量不会有默认值,所以要求使用变量之前必须要对其初始化 .如果在使用变量之前不进行初始化就会报错: [ ...
 - MySQL InnoDB锁机制
			
概述: 锁机制在程序中是最常用的机制之一,当一个程序需要多线程并行访问同一资源时,为了避免一致性问题,通常采用锁机制来处理.在数据库的操作中也有相同的问题,当两个线程同时对一条数据进行操作,为了保证数 ...
 - Vue 2.0基础语法:系统指令
			
本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. Vue初体验 新建一个空的项目,引入vue.js文件.写如下代码: &l ...
 - 验证码进阶(TensorFlow--基于卷积神经网络的验证码识别)
			
本人的第一个深度学习实战项目,参考了网络上诸多牛人的代码,在此谢过,因时间久已,不记出处,就不一一列出,罪过罪过. 我的数据集是我用脚本在网页上扒的,标签是用之前写的验证码识别方法打的.大概用了400 ...
 - js正则表达语法
			
/* *通过量词可以设置一个内容出现的次数 *量词只对它前边的一个内容起作用.所以在作用多个时需要用小括号()来向计算机说明这是一个整体. *-{n}代表正好出现n次. *-{m,n}出现了m-n次. ...