Unity 琐碎5 : 利用反射设置编辑器参数
问题
最近处理unity资源打包问题时候经常遇到的一个问题就是平台切换和Bundle编译。一般情况下,平台转换我需要依赖Cache Serbver加快转换速度,但是在Build Bundle的时候我又不想打开Cache Server,因为会非常非常慢(bundle文件超过2000个)。每次都记得这个操作不现实,所以就考虑是否可以在平时打开Cache Server,Build Bundle时关闭。
Unity 自身Editor没提供这个方面的API参考钱康来C#反射——掀起Unity Editor面纱一问的思路,只要是编辑器下可以操作的按钮或者界面应该都可以通过反射进行额外的设置(前提手里有源码哈)。CacheServerPreferences类是UnityEditor内部类,主要处理菜单Editor-->Preferences中 Cache Server 界面的数据处理,so,折腾了一会发射就会有下面的代码:
参考代码
private static void SetCacheServer(bool enable, string ipAddr = "10.8.21.74")
{
//1 获取程序集
Assembly asm = Assembly.GetAssembly(typeof(UnityEditor.AssetImporter));
if (asm == null)
{
return;
}
//2 UnityEditor 内部类
Type cacheServerType = asm.GetType("UnityEditor.CacheServerPreferences");
//3 创建实例
object cacheServerPreferencesObj = System.Activator.CreateInstance(cacheServerType);
//4 通过反射读取已设置的参数
MethodInfo readPreferencesMethod = cacheServerType.GetMethod("ReadPreferences");
readPreferencesMethod.Invoke(cacheServerPreferencesObj, null);
//5 通过反射设置CacheServer 参数
FieldInfo CacheServerMode = cacheServerType.GetField("s_CacheServerMode", BindingFlags.NonPublic | BindingFlags.Static);
FieldInfo CacheServerIPAddress = cacheServerType.GetField("s_CacheServerIPAddress", BindingFlags.NonPublic | BindingFlags.Static);
CacheServerMode.SetValue(cacheServerPreferencesObj, enable? 1:2);
CacheServerIPAddress.SetValue(cacheServerPreferencesObj, ipAddr);
//6 通过反射 保存 CacheServer 参数
MethodInfo writePreferencesMethod = cacheServerType.GetMethod("WritePreferences");
writePreferencesMethod.Invoke(cacheServerPreferencesObj, null);
}
参考
在命名空间中通过反射,获取所有类型
C#反射Assembly 详细说明
Assembly 类
C#反射——掀起Unity Editor面纱
Unity 琐碎5 : 利用反射设置编辑器参数的更多相关文章
- 【Unity】13.2 通过Lighting Window设置相关参数
分类:Unity.C#.VS2015 创建日期:2016-05-19 一.简介 Unity 5.3.4的Lighting Window有3个选项卡:Object.Scene.Lightmaps. 二. ...
- java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值
1.java利用反射机制判断对象的属性是否为空: Map<String,String> validateMap = new LinkedHashMap<String, String& ...
- 利用反射调用方法时,处理ref,out参数需要注意的问题(转)
转自:http://www.68idc.cn/help/buildlang/ask/20150318283817.html 项目中如下的泛型方法,因为要在运行时,动态指定类型参数,所以要利用反射来实现 ...
- C# 利用反射动态创建对象——带参数的构造函数和String类型
C# 利用反射动态创建对象——带参数的构造函数和String类型 最近笔者有一个想法需要利用反射动态创建对象(如string,int,float,bool,以及自定义类等)来实现,一直感觉反射用不好, ...
- C#利用反射动态创建对象 带参数的构造函数和String类型 (转载)
最近笔者有一个想法需要利用反射动态创建对象(如string,int,float,bool,以及自定义类等)来实现,一直感觉反射用不好,特别是当构造函数带参数的时候.MSDN上给出的例子十分复杂,网上的 ...
- java 中利用反射机制获取和设置实体类的属性值
摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...
- Python基础篇【第3篇】: Python异常处理、反射、动态导入、利用反射的web框架
异常处理 什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行. 一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误.当P ...
- c#反射机制学习和利用反射获取类型信息
反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...
- 不用Unity库,利用.NET动态代理自己实现AOP
AOP意为面向切面的程序设计,主要表现为对不同的代码逻辑进行隔离,从而降低不同业务逻辑之间的耦合性,AOP又理解为“横切”,可以在不改变原有实现的情况下,对代码进行拦截和扩展,如果原有设计像一个瓶子, ...
随机推荐
- Go基础系列:构建go程序
hello world 从一个简单的程序开始解释,将下面的内容放进test.go文件中,路径随意: package main import ( "fmt" ) func main( ...
- 翻译:select into outfile(已提交到MariaDB官方手册)
本文为mariadb官方手册:SELECT INTO OUTFILE的译文. 原文:https://mariadb.com/kb/en/select-into-outfile/ 我提交到MariaDB ...
- Python 的反射机制
什么叫做反射 利用字符串的形式去对象(模块)中操作(查找/添加/获取/删除)成员,一种基于字符串的事件驱动. 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型.然后,可以 ...
- 关于 Uboot 中有趣的 0xdeadbeef 填充
在 Uboot 的 Start.S 中存在以下源码: .globl _start _start: b start_code ldr pc, _undefined_instruction ldr pc, ...
- linux内核源码目录结构分析
原文地址 /arch.arch是architecture的缩写.arch目录下是好多个不同架构的CPU的子目录,譬如arm这种cpu的所有文件都在arch/arm目录下,X86的CPU的所有文件都在a ...
- JVM(二)—— 类加载机制
问题 1.为什么要有类加载机制(类加载机制的意义是什么) 2.类加载机制的过程,这些步骤可以颠倒顺序么?,每个步骤的作用是什么? 3.什么情况下必须对类进行初始化 类加载的过程 加载--验证--准备- ...
- 使用sublime text3编写vuejs项目需要安装的一些插件
最近使用webstorm开发vuejs项目的时候经常出现卡顿的现象,感觉还是sublime text3比较轻巧便捷,但是使用sublime text3需要安装一些插件- 1. 让vue文件高亮: 安装 ...
- C#调用C++(QT5.5.1项目)的C++/CLI(CLR项目)项目技术笔记
导航 1.编译环境 2.项目配置 1.设置附加包含目录 2.设置附加库目录 3.设置附加依赖项 3.CLR中各种定义 1.接口定义 2.类定义 3.枚举定义 4.属性定义 4.CLR中各种使用 1.类 ...
- 一个smtp发送错误
错误返回: Error: need EHLO and AUTH first ! 原因:服务器是smtp.exmail.qq.com,邮箱账号是企业新申请的邮箱账号,邮箱密码需要重新修改. 解决办法:修 ...
- Spring 中事务控制的API介绍
1.PlatformTransactionManager Spring所有事务代理类都是基于PlatformTransactionManager接口的实现. 此接口是spring的事务管理器,它里面提 ...