zoukankan      html  css  js  c++  java
  • 用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 FilesUnityEditorDataMonolibmono2.0System.dll"></assembly>
          <assembly value="C:Program FilesUnityEditorDataManagedUnityEngine.dll"></assembly>
          <assembly value="C:Program FilesUnityEditorDataUnityExtensionsUnityGUISystemUnityEngine.UI.dll"></assembly>
      
          <assembly value="E:/Unity/AS3Unity/AS3HotfixLibraryScriptAssembliesAssembly-CSharp.dll"></assembly>
          <assembly value="E:UnityAS3UnityAS3HotfixAssetsDOTweenDOTween.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),因此泛型方法定义不能直接在脚本中使用。我们必须在主工程中写一些工具方法作为桥梁。

  • 相关阅读:
    Linux kill, killall, kill -9
    mongodb分片集群(无副本集)搭建
    如何用vs查看结构体布局
    Winsock在Windows下的编程教程(C语言)(图文并茂,超长教程)
    HTTPS 中双向认证SSL 协议的具体过程
    RAR压缩解压命令
    x64栈结构
    ASP.NET Web API下的HttpController激活:程序集的解析
    Lucene学习-深入Lucene分词器,TokenStream获取分词详细信息
    IO多路复用之select
  • 原文地址:https://www.cnblogs.com/ashei/p/8904275.html
Copyright © 2011-2022 走看看