用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用第三方组件
Unity开发中,常常会用到一些第三方组件。本文以实例介绍如何在热更新脚本中使用这些第三方组件。
首先说明几个基本步骤:
- 第三方组件通常是以dll或者源码方式提供的,它们本身往往无法热更。
 - 我们在脚本中使用第三方组件之前,需要将它们也导出一份可供脚本使用的API
 - 这个步骤可以通过脚本工程提供的一个配置文件和批处理完成。
 
本文以DOTween为例,说明如何在工程中使用DOTween。
- 首先,先创建一个Unity工程,并且创建热更新工程。如果您不会创建,请参考这里:
 - 去DOTween的官网下载Unity插件包。地址:http://dotween.demigiant.com/download.php
 - 将DOTween拖入Unity工程。

 - 将DOTween的API导出为ActionScript3的API。打开热更新工程的genapi.config.xml文件,将DOTween.dll加入到配置文件中:
<!--Configure DLLs to export-->
<buildassemblys> <assembly value="C:\Program Files\Unity\Editor\Data\Mono\lib\mono\2.0\System.dll"></assembly>
<assembly value="C:\Program Files\Unity\Editor\Data\Managed\UnityEngine.dll"></assembly>
<assembly value="C:\Program Files\Unity\Editor\Data\UnityExtensions\Unity\GUISystem\UnityEngine.UI.dll"></assembly> <assembly value="E:/Unity/AS3Unity/AS3Hotfix\Library\ScriptAssemblies\Assembly-CSharp.dll"></assembly>
<assembly value="E:\Unity\AS3Unity\AS3Hotfix\Assets\DOTween\DOTween.dll"></assembly> </buildassemblys> - 执行CreateUnityAPI.bat,导出API代码。
 - 打开热更新工程的Main.as,写入如下代码:
package
{
[Doc]
/**
* ...
* @author
*/
public class Main
{
public function Main()
{ } public function update():void
{ } } }
import dg.tweening.DOTween;
import dg.tweening.Tween;
import unityengine.Camera;
import unityengine.GameObject;
import unityengine.MonoBehaviour;
import unityengine.Vector3; class doposition extends MonoBehaviour
{
var colorTween:Tween, emissionTween:Tween, offsetTween:Tween;
private function Start()
{
var target:GameObject = GameObject.find("Cube"); //调用Double类型的缓动。
DOTween.to_(
//属性获取器
function():Number{
return target.transform.position.z;
}
,
//属性设置器
function(z:Number):void
{
target.transform.position = new Vector3(0, 0, z);
}
,
//移动到10
10
,
//在3秒内移动到位
3
); }
} Camera.main.gameObject.addComponent(doposition); - 点击编译后,在Unity中可看到效果:立方体在3秒内移动到了0,0,10的位置。
 

最后有些地方需要说明:DoTween这个项目使用了大量的扩展方法。但是ActionScript3脚本是不能直接支持扩展方法的。但是我们可以使用原型链扩展使得扩展方法看起来可以被调用。
另外,DoTween的扩展方法中使用了大量泛型方法定义。由于需要热更新的平台无法动态创建类型(例如IOS),因此泛型方法定义不能直接在脚本中使用。我们必须在主工程中写一些工具方法作为桥梁。
用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用第三方组件的更多相关文章
- 用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的热更新 -- 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的热更新 -- 在脚本中使用MonoBehaviour
		
继上次分析了热更新的Demo后,这次来介绍如何在热更新代码中使用MonoBehaviour. MonoBehaviour挂载到GameObject对象上的脚本的基类.平常Unity开发时,简单的做法就 ...
 - 用ECMAScript4 ( ActionScript3)  实现Unity的热更新 -- 操作符重载和隐式类型转换
		
C#中,某些类型会定义隐式类型转换和操作符重载.Unity中,有些对象也定义了隐式类型转换和操作符重载.典型情况有:UnityEngine.Object.UnityEngine.Object的销毁是调 ...
 
随机推荐
- nat和napt技术
			
私网IP地址是指内部网络或主机的IP地址,公网IP地址是指在因特网上全球唯一的IP地址. RFC 1918为私有网络预留出了三个IP地址块,如下: A类:10.0.0.0-10.255.255.255 ...
 - Web Api  过滤器之 ExceptionFilter 异常过滤器
			
一.服务器出现异常,会统一向客户端返回 500 的错误. [RoutePrefix("api/test")] public class TestController : ApiCo ...
 - GIT入门笔记(18)- 标签创建和管理
			
git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id: git tag -a <tagname> -m "blablabla ...
 - Maven的作用是什么
			
现在我们开发的项目基本上都是maven项目,maven项目也是一个项目,类似于javaProject,javaWebProject,就是多了些功能. 那就说说究竟多了什么功能呢. 1 . 帮你下载ja ...
 - python基础——类名称空间与对象(实例)名称空间
			
python基础--类名称空间与对象(实例)名称空间 1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类 ...
 - 计算机网络-TCP之三次握手/四次握手
			
.概念 .特点 .背景知识补充 .三次握手 .四次握手 .其他补充 1.概念 TCP(Transmission Control Protocol,传输控制协议)是 在不可靠的IP层之上实现的可靠的数据 ...
 - 确保 PHP 应用程序的安全 -- 不能违反的四条安全规则
			
规则 1:绝不要信任外部数据或输入 关于 Web 应用程序安全性,必须认识到的第一件事是不应该信任外部数据.外部数据(outside data) 包括不是由程序员在 PHP 代码中直接输入的任何数据. ...
 - JavaScript数据结构与算法(四) 循环队列的实现
			
实现击鼓传花,需要用到上一章所述队列类Queue TypeScript方式实现源码 let hotPotato = (nameList, num) => { let queue = new Qu ...
 - Spring MVC 知识点记忆
			
1.Dao 用的 @Repository 2.Handler 用的 @Controller 3. @Autowired 消除了对get set方法 4. @RequestMapping(value= ...
 - [HAOI 2006]旅行comf
			
Description 题库链接 给你一个 \(n\) 个点, \(m\) 条边的无向图.并给出一个点对 \((s,t)\) ,求 \(s,t\) 间的一条路径,使得路径上最大边和最小边的比值最小. ...