예제 #1
0
        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);
                }
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        /// <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);
        }