zoukankan      html  css  js  c++  java
  • 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面纱

  • 相关阅读:
    hadoop 配置
    spark 学习网站和资料
    spark-submit 提交任务及参数说明
    python 浮点运算
    nginx 和 php
    clojure 语法
    编程语言
    spark
    mvn 与 pom.xml
    偏导数与偏微分
  • 原文地址:https://www.cnblogs.com/zsb517/p/7095702.html
Copyright © 2011-2022 走看看