Unity3D Android动态反射加载程序集
这种办法在iOS下是不让用的,只能在Android下用。用起来也很方便了。
1、先创建一个c#工程,引用到的UnityEngine.dll在Unity的安装目录里找吧
2、将编译的dll放入Unity工程,并打成assetBundle。(要把缀名改成.bytes,这个类型Unity才识别,才能打成assetbundle)
打bundle代码
#if UNITY_EDITOR
[MenuItem("GameObject/BuildAsset")]
static void BuildAsset()
{
var se = Selection.GetFiltered(typeof (Object), SelectionMode.DeepAssets); foreach (var o in se)
{
string sp = AssetDatabase.GetAssetPath(o);
string tar = Application.streamingAssetsPath + "/" + o.name + ".unity3d"; if (!BuildPipeline.BuildAssetBundle(o, null, tar, BuildAssetBundleOptions.CollectDependencies,BuildTarget.Android))
{
Debug.Log(tar);
}
}
AssetDatabase.Refresh(); }
#endif
右键点资源,就有BuildAsset
bundle就会生成StreamingAssets里
3、写测试代码
using System.Collections;
using System.Collections.Generic;
#if UNITY_EDITOR
using UnityEditor;
#endif
using UnityEngine; public class TestGame : MonoBehaviour
{ // Use this for initialization
void Start ()
{ } // Update is called once per frame
void Update () { } IEnumerator Load()
{
#if UNITY_EDITOR
var path = "file://" + Application.streamingAssetsPath + "/" + "ReflectTest.dll.unity3d";
#else
#if UNITY_ANDROID
var path = "jar:file://" + Application.dataPath + "!/assets/" + "ReflectTest.dll.unity3d";
#elif UNITY_IOS
var path = Application.dataPath + "/Raw/"+"ReflectTest.dll.unity3d";
#endif
#endif //var path = "file://"+Application.streamingAssetsPath + "/" + "HelipadEscapeGame.unity3d";
Debug.Log("path="+path);
using (WWW www = new WWW(path))
{
yield return www;
var tex = www.assetBundle.LoadAsset<TextAsset>("ReflectTest.dll");
//var tex = www.assetBundle.LoadAsset<TextAsset>("HelipadEscapeGame"); var ass = System.Reflection.Assembly.Load(tex.bytes);
var type = ass.GetType("Class1"); gameObject.AddComponent(type);
} }
#if UNITY_EDITOR
[MenuItem("Assets/BuildAsset")]
static void BuildAsset()
{
var se = Selection.GetFiltered(typeof (Object), SelectionMode.DeepAssets); foreach (var o in se)
{
string sp = AssetDatabase.GetAssetPath(o);
string tar = Application.streamingAssetsPath + "/" + o.name + ".unity3d"; if (!BuildPipeline.BuildAssetBundle(o, null, tar, BuildAssetBundleOptions.CollectDependencies,BuildTarget.Android))
{
Debug.Log(tar);
}
}
AssetDatabase.Refresh(); }
#endif
void OnGUI()
{
if (GUI.Button(new Rect(, , , ), "Load"))
{
StartCoroutine(Load());
}
}
}
Unity3D Android动态反射加载程序集的更多相关文章
- Unity热更新之C#反射加载程序集
用C#反射加载程序集的方式可以动态的从assetBundle资源包或其他资源包里加载脚本到工程中,即便是原工程中不存在的脚本. 我这里就用加载本地assetBundle的方式来进行讲解了,加载网络上的 ...
- 使用C#的AssemblyResolve事件动态解析加载失败的程序集
我们知道反射是 依赖注入 模式的基础,依赖注入要求只在项目中引用定义接口的程序集,而不引用接口实现类的程序集,因为接口实现类的程序集应该是通过反射来动态加载的,这样才能保证接口与其实现类之间的松耦合. ...
- 使用C#的AssemblyResolve事件和TypeResolve事件动态解析加载失败的程序集
我们知道反射是 依赖注入 模式的基础,依赖注入要求只在项目中引用定义接口的程序集,而不引用接口实现类的程序集,因为接口实现类的程序集应该是通过反射来动态加载的,这样才能保证接口与其实现类之间的松耦合. ...
- Android系统下的动态Dex加载
1 问题在Android系统中,一个App的所有代码都在一个Dex文件里面.Dex是一个类似Jar的存储了多有Java编译字节码的归档文件.因为Android系统使用Dalvik虚拟机,所以需要把使用 ...
- C#动态加载程序集(转)
C#动态加载程序集 今天在看网络上的一篇关于‘.NET应用自动部署窗体技术’.NET的自动部署技术构造在.NET框架之中,它使得应用程序能够通过HTTP连接从远程服 务器按需下载程序集.有了这个功能, ...
- Android系统下的动态Dex加载与app速度优化
1 问题 在Android系统中,一个App的所有代码都在一个Dex文件里面.Dex是一个类似Jar的存储了多有Java编译字节码的归档文件.因为Android系统使用Dalvik虚拟机,所以需要把 ...
- C# 动态加载程序集信息
本文通过一个简单的实例,来讲解动态加载Dll需要的知识点.仅供学习分享使用,如有不足之处,还请指正. 在设计模式的策略模式中,需要动态加载程序集信息. 涉及知识点: AssemblyName类,完整描 ...
- C#使用反射加载多个程序集
当开发插件的时候需要用到反射,在客户端动态加载遍历程序集,并调用每个程序集的方法. 创建一个控制台应用程序,首先设计一个接口: public interface ISay { void SaySth( ...
- 应用程序域 System.AppDomain,动态加载程序集
一.概述 使用.NET建立的可执行程序 *.exe,并没有直接承载到进程当中,而是承载到应用程序域(AppDomain)当中.在一个进程中可以包含多个应用程序域,一个应用程序域可以装载一个可执行程序( ...
随机推荐
- UIView - CAGradientLayer
CAGradientLayer *layer = [[CAGradientLayer alloc] init]; layer.frame = self.bounds; //渐变转折点 layer.lo ...
- 设置更改root密码 连接mysql mysql常用命令
- 管道符和作业控制 shell变量 环境变量配置文件
8.6 管道符和作业控制 8.7/8.8 shell变量 8.9 环境变量配置文件 管道符和作业控制 管道符:表示把一个文件的输出内容传送到后面的命令 grep 用来过滤指定关键词的命令 “|” 为 ...
- 制作做最小的fedora、ubuntu , jeos系统
之前做过, 2018年4月底,最新的fedora28 .ubuntu18.04发布后,自己又尝试做了下. ubuntu的成功了,比较简单: fedora的其实不用自己去制作,直接定制官方的Atomic ...
- spring aop的配置
http://www.cnblogs.com/oumyye/p/4480196.html http://blog.csdn.net/hjm4702192/article/details/1727766 ...
- mysql数据库中,如何对json数据类型的值进行修改?通过json_set函数对json字段值进行修改?
需求描述: 今天在看mysql中存放json数据类型的问题,对于json数据进行修改的操作, 在此记录下. 操作过程: 1.创建包含json数据类型的表,插入基础数据 mysql> create ...
- [Bayesian] “我是bayesian我怕谁”系列 - Naive Bayes with Prior
先明确一些潜规则: 机器学习是个collection or set of models,一切实践性强的模型都会被归纳到这个领域,没有严格的定义,’有用‘可能就是唯一的共性. 机器学习大概分为三个领域: ...
- 九度 1464:Hello World for U
题目描述: Given any string of N (>=5) characters, you are asked to form the characters into the shape ...
- 【RF库XML测试】Get Element
Name:Get ElementSource:XML <test library>Arguments:[ source | xpath=. ]Returns an element in t ...
- NSIS安装vcredist_64.exe
; ExecWait ‘vcredist_x86.exe’ # 一般的安装ExecWait ‘”vcredist_x86.exe” /q’ # silent install 静默安装; ExecWai ...