private void RevertComponent(ScriptComponentLoader scrLoader) { Assembly assemble = AssemblyManager.DefaultCSharpAssembly; if (!string.IsNullOrEmpty(scrLoader.assemblyName)) { assemble = AssemblyManager.GetAssembly(scrLoader.assemblyName); } System.Type type = assemble.GetType(scrLoader.componentName); if (type == null) { Debug.LogError("script " + scrLoader.componentName + " can not be found in " + (string.IsNullOrEmpty(scrLoader.assemblyName) ? "defaultCSharpAssembly" : scrLoader.assemblyName)); return; } Component comp; if (scrLoader.componentName != null) { comp = scrLoader.gameObject.AddComponent(type); FieldInfo[] compFieldInfos = comp.GetType().GetFields(); Type objType = scrLoader.srcObj.GetType(); for (int i = 0; i < compFieldInfos.Length; i++) { object value = objType.GetField(compFieldInfos[i].Name).GetValue(scrLoader.srcObj); compFieldInfos[i].SetValue(comp, value); } } }
void Awake() { Assembly assemble = DefaultCSharpAssembly; if (!string.IsNullOrEmpty(assemblyName)) { assemble = AssemblyManager.GetAssembly(assemblyName); } System.Type type = assemble.GetType(componentName); if (type == null) { Debug.LogError("script " + componentName + " can not be found in " + (string.IsNullOrEmpty(assemblyName) ? "defaultCSharpAssembly" : assemblyName)); return; } Component comp; if (componentName != null) { comp = gameObject.AddComponent(type); var data = JsonMapper.ToObject(srcObj); if (data != null) { JsonObject.Apply(comp, data); } } Destroy(this); }
void Awake() { Assembly assemble = DefaultCSharpAssembly; if (!string.IsNullOrEmpty(assemblyName)) { assemble = AssemblyManager.GetAssembly(assemblyName); } System.Type type = assemble.GetType(componentName); if (type == null) { Debug.LogError("script " + componentName + " can not be found in " + (string.IsNullOrEmpty(assemblyName)? "defaultCSharpAssembly" : assemblyName)); return; } Component comp; if (componentName != null) { comp = gameObject.AddComponent(type); FieldInfo[] fieldInfos = comp.GetType().GetFields(); Type objType = srcObj.GetType(); for (int i = 0; i < fieldInfos.Length; i++) { object value = objType.GetField(fieldInfos[i].Name).GetValue(srcObj); fieldInfos[i].SetValue(comp, value); } } Destroy(this); }
/// <summary> /// 根据名称获取程序集中的类型 /// </summary> /// <param name="assembly">程序集名称,例如:SSJJ,Start</param> /// <param name="typeName">类型名称,必须包含完整的命名空间,例如:SSJJ.Render.BulletRail</param> /// <returns>类型</returns> public static Type GetAssemblyType(string assembly, string typeName) { Type t; if (Application.platform == RuntimePlatform.Android || Application.isEditor) { t = AssemblyManager.GetAssembly(assembly).GetType(typeName); } //其他平台使用默认程序集中的类型 else { t = AssemblyManager.DefaultCSharpAssembly.GetType(typeName); } return(t); }