用C#反射加载程序集的方式可以动态的从assetBundle资源包或其他资源包里加载脚本到工程中,即便是原工程中不存在的脚本。

我这里就用加载本地assetBundle的方式来进行讲解了,加载网络上的与之类似。

第一步,加载assetBundle资源,assetBundle名称为Test:

//将本地文件转为字节
FileStream fs = new FileStream(Application.dataPath + "/Test", FileMode.Open, FileAccess.Read); byte[] buffur = new byte[fs.Length]; fs.Read(buffur, 0, (int)fs.Length); fs.Close();

第二步,加载程序集及获取指定类型

public GameObject _gameObjectRoot;

public TextAsset _script;

public GameObject _gameobject;

StartCoroutine(BeginGetAsset(buffur));

IEnumerator BeginGetAsset(byte[] bytes)
{
//从内存中获取资源
AssetBundleCreateRequest acr = AssetBundle.CreateFromMemory(bytes);
yield return acr;
_assetBundle = acr.assetBundle;
//加载资源中的预设
_gameObjectRoot = (GameObject)_assetBundle.LoadAsset("GameObjectRoot.prefab");
//将预设创建在场景内
yield return _gameobject = Instantiate(_gameObjectRoot);
//获取到assetBundle中的test.DLL
_script = (TextAsset)_assetBundle.LoadAsset("test", typeof(TextAsset));
//C#反射取出程序集
System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(_script.bytes);
//加载程序集中的脚本Mytest.cs
_gameobject.AddComponent(assembly.GetType("Mytest"));
}

Unity热更新之C#反射加载程序集的更多相关文章

  1. Unity热更新之C#反射动态获取类属性及方法

    如果我们要为发布出去的游戏更新一些功能,但又不想让用户重新下载整个游戏包,只让他下载我们更新的资源包,用assetBundle打包资源的方式是可以的,但其中有个最大的例外,那就是脚本. 虽然asset ...

  2. 关于RN热更新-iOS端捕获加载jsbundle异常解决方案

    1.监听加载jsbundle异常的处理 模拟情况:合并增量后jsbundle文件出现部分错误调试发现当加载jsbundle出现异常时,RN模块RCTBatchedBridge.m中如下代码会执行: - ...

  3. Unity3D Android动态反射加载程序集

    这种办法在iOS下是不让用的,只能在Android下用.用起来也很方便了. 1.先创建一个c#工程,引用到的UnityEngine.dll在Unity的安装目录里找吧 2.将编译的dll放入Unity ...

  4. 另类Unity热更新大法:代码注入式补丁热更新

    对老项目进行热更新 项目用纯C#开发的? 眼看Unity引擎热火朝天,无数程序猿加入到了Unity开发的大本营. 一些老项目,在当时ulua/slua还不如今天那样的成熟,因此他们选择了全c#开发:也 ...

  5. Quartz.net 2.x 学习笔记03-使用反射加载定时任务

    将定时任务信息存储在XML文件中,使用反射加载定时任务 首先新建一个MVC的空站点,使用NuGet添加对Quartz.net和Common.Logging.Log4Net1213的引用,同时使用NuG ...

  6. unity热更新方案对比

    Unity应用的iOS热更新 •  什么是热更新 •  为何要热更新 •  怎样在iOS 上对Unity 应用进行热更新 •  支持Unity iOS 热更新的各种Lua 插件的对照 什么是热更新 • ...

  7. 仅反射加载(ReflectionOnlyLoadFrom)的 .NET 程序集,如何反射获取它的 Attribute 元数据呢?

    原文:仅反射加载(ReflectionOnlyLoadFrom)的 .NET 程序集,如何反射获取它的 Attribute 元数据呢? 平时我们获取一个程序集或者类型的 Attribute 是非常轻松 ...

  8. C#使用反射加载多个程序集

    当开发插件的时候需要用到反射,在客户端动态加载遍历程序集,并调用每个程序集的方法. 创建一个控制台应用程序,首先设计一个接口: public interface ISay { void SaySth( ...

  9. Unity开发实战探讨-资源的加载释放最佳策略简要心得

    Unity开发实战探讨-资源的加载释放最佳策略简要心得 看过我另外一篇关于Unity资源释放随笔<Unity开发实战探讨-资源的加载释放最佳策略>如果觉得略微复杂,那么下面是一些比较简要的 ...

随机推荐

  1. Rails里rake db:migrate出现undefined method last_comment问题的解决

    这个问题和特定的rake版本有关,因为Rails要使用rake的last_comment方法在较新版本的rake中已被废弃,所以很多人卸载了新版本的rake去安装旧版本的rake. 这样也能解决问题, ...

  2. dimens.xml详解

    本文联合两篇博文和自身理解写下 其中一篇:http://blog.csdn.net/hnzcdy/article/details/50628993 另一篇:暂不知原作者 Android中官方建议的屏幕 ...

  3. ARM C C++内存对齐

           ARM 系列处理器是 RISC (Reducded Instruction Set Computing)处理器.很多基于ARM的高效代码的程序设计策略都源于RISC 处理器.和很多 RI ...

  4. Programming In Scala笔记-第八章、函数与闭包

    当程序的代码量增大时,就需要对各功能模块进行分割,这些分割的小模块就是本文中接下来会进行分析的函数.接下来的部分会讲解包括函数嵌套,函数字面量,以及函数值等概念. 一.方法 一会函数一会方法的,是不是 ...

  5. Python descriptor

    class A: def __init__(self, name): self.name = name def __get__(self, ins, cls): print('call get') i ...

  6. Centos6.5 mysql安装

    cenos中安装软件使用yum进行安装,小米加步枪不如ak47. 第1步.yum安装mysql   yum -y install mysql-server 第2步.设置开机启动   chkconfig ...

  7. java的断言(assert)

    概述 在C和C++语言中都有assert关键,表示断言.在Java中,同样也有assert关键字,表示断言,用法和含义都差不多.在Java中,assert关键字是从JAVA SE 1.4 引入的,为了 ...

  8. 使用Myeclipse10.0自动生成搭建SSH框架(数据库表自动反向转换成Hibernate实体)实现用户登陆

    我这里使用的数据库是mysql5.0 数据是上课用的.这些都不是重点,重要的是学会这个方法: 创建好数据库: create database jboadefault character set utf ...

  9. Struts 1 之文件上传

    Struts 1 对Apache的commons-fileupload进行了再封装,把上传文件封装成FormFile对象 定义UploadForm: private FormFilefile; //上 ...

  10. FFmpeg的H.264解码器源代码简单分析:解析器(Parser)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...