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

Unity开发中,常常会用到一些第三方组件。本文以实例介绍如何在热更新脚本中使用这些第三方组件。

首先说明几个基本步骤:

  1. 第三方组件通常是以dll或者源码方式提供的,它们本身往往无法热更。
  2. 我们在脚本中使用第三方组件之前,需要将它们也导出一份可供脚本使用的API
  3. 这个步骤可以通过脚本工程提供的一个配置文件和批处理完成。

本文以DOTween为例,说明如何在工程中使用DOTween。

  1. 首先,先创建一个Unity工程,并且创建热更新工程。如果您不会创建,请参考这里:
  2. 去DOTween的官网下载Unity插件包。地址:http://dotween.demigiant.com/download.php
  3. 将DOTween拖入Unity工程。
  4. 将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>
  5. 执行CreateUnityAPI.bat,导出API代码。
  6. 打开热更新工程的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);
  7. 点击编译后,在Unity中可看到效果:立方体在3秒内移动到了0,0,10的位置。

 

 最后有些地方需要说明:DoTween这个项目使用了大量的扩展方法。但是ActionScript3脚本是不能直接支持扩展方法的。但是我们可以使用原型链扩展使得扩展方法看起来可以被调用。

另外,DoTween的扩展方法中使用了大量泛型方法定义。由于需要热更新的平台无法动态创建类型(例如IOS),因此泛型方法定义不能直接在脚本中使用。我们必须在主工程中写一些工具方法作为桥梁。

 

转载于:https://www.cnblogs.com/ashei/p/8904275.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本课程主要是针对ILRuntime设计一个独立的脚本热更新框,框架的优势:1.将代码热更脱离Assetbundle资源热更,独立的部分更适用于各种不同的框架。2.加快项目的逻辑更新,bug修复.(后期修bug,多数情况下并不用动到资源,只需要更新脚本代码,无需重走资源打包发布流程,大大提升效率)3.提供热更模式和正常开发模式的快速切换接口,可以让队友像平常一样去开发.4.不依赖市面上的任何AB框架,完全兼容市面上各种不同的AB框架.5.重点:希望通过它,帮助你学习、了解ILRuntime真正在项目中的应用.框架的将提供以下这些接口,这些接口将从0开始,在Unity里将C#脚本编译成dll,然后将dll放到服务器上,再将dll下载下来,进行加载,到最后从Unity主工程调用热更新的代码逻辑.1.Create hotfixdll接口将热更部分的代码 编译成dll生成dll版本配置(MD5)2.更新对比接口本地跟服务器的dll进行版本对比3.下载热更dll下载dll本身的文件下载版本记录文件4.加载热更dll加载dll实例化:AppDomain初始化:注册跨域继承适配器注册委托适配器LitJson重定向调用性能优化(CLR绑定功能)调用热更接口Hotfix.HotfixApplication.Main 进入热更逻辑5.ILMonoBehaviour用于监听组件的生命周期,实际是桥接(调用)热更的逻辑AwakeStartEnableUpdateLateUpdate.......6.添加其他常用的库DOTweenLitJsonSpineGoogle.ProtobufTextAnimation可以根据上面的方式,自行添加依赖的库... 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值