AssetBundles与脚本

所有Unity的AssetBundle,无论是从本地获取 还是www,或者打包整个场景。物体上的脚本都不会被编译。所以AssetBundle打包的时候即使物体上有脚本。导入后其他所有Unity的文件都不会有问题,唯独脚本是没作用的(错,只要主程序里含这个脚本就没有问题,也就是主程序和AB一起发布)。那能不能用脚本呢? 答案是,可以!

核心是脚本可以打包进Dll,然后在客户端用System.Reflection下的Assembly来加载。

步骤:

开发

(1)正常开发

(2)写一个如txt的文本文档,说明物体上挂载的脚本

(3)最后发布前,打包dll,标注dll版本号

(4)打包AssetBundle,标注AssetBundle版本号

客户端

(1)先下载AssetBundle作为bytes,再保存到本地

(2)使用AssetBundle.CreateFromMemory加载,再读取GameObject

(3)下载dll,并根据文档将 脚本加载到对应的GameObject上

核心代码:

1.assembly=Assembly.Load (m_WWW.bytes);//从服务器上读取dll,作为assembly。中间可以加bytes的本地保存

2.System.Type type = assembly.GetType ("ShowOnGUI"); //根据脚本类名称ShowOnGUI得到类

3.gameObject.AddComponent(type);//将这个脚本挂在到物体上

注意

System.Reflection的这个做法对端游和安卓都没问题。但是违反苹果的相关规定,iOS可以用LUA。

打包 code -> assembly -> .bytes -> ab

使用 ab -> .bytes -> assembly

源自:http://www.siluyouxi.com/game/code/u3d/1494.html

博主说明:AB里包含的脚本,主程序里必须有一份,否则下载过来也会在挂脚本的地方出现叹号,而且通过测试,在AB里加了一个脚本,主程序不更新也没有用。可能打包时,AB里只包含了脚本的名字,一切以主程序里的

脚本为准。AB打包脚本处理不完美,lua则是为解决这个问题出现的,极像WEB服务器端的脚本型解释执行语言,在服务端随时可以修改,立即生效,更新是相当方便。

assetBundle打包脚本与LUA的更多相关文章

  1. U3D assetbundle打包

    using UnityEngine; using System.Collections; using UnityEditor; //此脚本不一定要放于editor目录下,经测试,放于其它地方也可以 p ...

  2. Unity3d 5.x AssetBundle打包与加载

    1.AssetBundle打包 unity 5.x版本AssetBundle打包,只需要设置好AssetBundle的名称后,unity会自动将其打包,无需处理其他,唯独需要做的是设置好个AssetB ...

  3. Unity5 AssetBundle打包加载及服务器加载

    Assetbundle为资源包不是资源 打包1:通过脚本指定打包 AssetBundleBuild ab = new AssetBundleBuild                         ...

  4. Unity——AssetBundle打包工具

    Unity批量打AB包 为了资源热更新,Unity支持将所有资源打包成AssetBundle资源,存放在SteamingAssets文件夹中: 在项目发布之前,需要将所有资源打包成.ab文件,动态加载 ...

  5. Unity5.x版本AssetBundle打包研究

    Unity5的AssetBundle打包机制和以前版本不太一样.简单的说就是,只要给你要打包的资源设置一个AssetBundleName ,Unity自身会对这些设置了名字的资源进行打包,如果一个资源 ...

  6. Cocos2d-x 脚本语言Lua中的面向对象

    Cocos2d-x 脚本语言Lua中的面向对象 面向对象不是针对某一门语言,而是一种思想.在面向过程的语言也能够使用面向对象的思想来进行编程. 在Lua中,并没有面向对象的概念存在,没有类的定义和子类 ...

  7. Cocos2d-x 脚本语言Lua使用

    Cocos2d-x 脚本语言Lua使用 前面几篇博客已经把Lua的相关基础知识介绍了.本篇博客就来介绍一下,怎样在Cocos2d-x项目中使用Lua这门脚本语言进行开发.因为笔者使用的时Mac系统.所 ...

  8. xcode8.3 shell 自动打包脚本 记录

    题记 xcode升级8.3后发现之前所用的xcode自动打包基本无法使用,因此在网上零碎找到些资料,将之前的脚本简化.此次脚本是基于xcode证书配置进行打包(之前是指定描述文件.相对繁琐).因此代码 ...

  9. AssetBundle打包

    为热更新打基础(xlua\tolua) 素材.源码链接:http://www.sikiedu.com/course/74/task/1812/show 一.AssetBundle的定义和作用 1,As ...

随机推荐

  1. 《Unity 3D游戏客户端基础框架》多线程异步 Socket 框架构建

    引言: 之前写过一个 demo 案例大致讲解了 Socket 通信的过程,并和自建的服务器完成连接和简单的数据通信,详细的内容可以查看 Unity3D -- Socket通信(C#).但是在实际项目应 ...

  2. [转载]MySQL索引原理与慢查询优化

    好文,以防丢失,故转之,另对排版做简单优化.原文地址:http://ourmysql.com/archives/1401 索引目的 索引的目的在于提高查询效率,可以类比字典,如果要查"mys ...

  3. 戴尔 Latiteude E7240 i7-4600U

    一.鲁大师各项数据 二.内存条 三.电池损耗 四.跑分

  4. java面试题7

    1.重载和重写的区别? 重载(Overload):(1)方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载Overloading是一个类中多态性 ...

  5. Redis学习笔记-常用命令篇(Centos7)

    redis提供了丰富的命令,这些命令可以在linux终端使用.在各类语言中,这些命令都有对应的方法. 一.键值相关 1.keys 返回满足给定pattern的所有key 127.0.0.1:6379& ...

  6. JavaBean和Map的相互转换

    JavaBean和Map的相互转换 一.JavaBean 1.什么是JavaBean? JavaBean其实就是一种遵循特定写法的类,必须遵循一定的规范: 类必须由public修饰,并且保证有公共的无 ...

  7. MAC OX 配置 Tomcat 说明

    1: 首先在官网下载 Tomcat(我选择的是最新的9.0) , http://tomcat.apache.org/ 2:下载完成之后将压缩包解压在/Library/下 可使用快捷键 control+ ...

  8. Tomcat 7 可以修改 Session 默认的 Cookie 名 JSESSIONID 了

    Tomcat 7 可以修改 Session 默认的 Cookie 名 JSESSIONID 了       程序员必上的开发者服务平台 —— DevStore 看看下面这个配置: <Contex ...

  9. emacs之切换h/cpp配置

    emacsConfig/switch-file-setting.el (defun switch-c () (global-set-key (kbd "<C-return>&qu ...

  10. 黄聪:[C#]如何获取变量的名字,不是值,是名称。返回名字的字符串

    找了好久,最后在国外的论坛找到了解决办法,直接贴代码吧. 方法一: public static class MemberInfoGetting { public static string GetMe ...