protected override void DoExport() { EditorUtility.DisplayProgressBar("导出插件脚本", "", 0.0f); var plugins = ConfigManager.configEntry.unityPluginConfig.unityPlugins; List <string> allRecursiveAssets = new List <string>(); int i = 0; int len = plugins.Count; try { plugins .Where(p => p.enable).ToList() .ForEach(plugin => { EditorUtility.DisplayProgressBar("处理插件", "", (float)i / len); DirectoryInfo jsDir = null; string pluginName = plugin.pluginName; if (plugin.pluginState == UnityPlugin.PluginState.convert && plugin.convertedPath.convertedJSPath != null && plugin.convertedPath.convertedJSPath != "") { jsDir = new DirectoryInfo(plugin.convertedPath.convertedJSPath); } else if (plugin.pluginState == UnityPlugin.PluginState.stub && plugin.stubPath.stubJSPath != null && plugin.stubPath.stubJSPath != "") { jsDir = new DirectoryInfo(plugin.stubPath.stubJSPath); pluginName += "-stub"; } // 有文件就直接打包,没文件就转换 if (jsDir == null || !jsDir.Exists || jsDir.GetFiles() == null || jsDir.GetFiles().Length == 0) { BridgeExport.ExportPluginMenu(plugin); } PackFiles(pluginName, jsDir.FullName); i++; }); } catch (Exception e) { throw e; } finally { EditorUtility.ClearProgressBar(); } Debug.Log("导出插件代码: " + i); }
public override void OnModuleInit() { Debug.Log(this.ToString() + " install callback"); // Build Directories var path = Path.Combine(DirectoryStructure.TopRoot, "References~", "Bridge", "Bridge.dll"); var exist = Precheck(); if (!exist) { Debug.Log("Bridge resources not exist, download..."); EditorUtility.DisplayProgressBar("Module Install", "下载模块所需资源", 0.0f); DownloadRes(); } EditorUtility.DisplayProgressBar("Module Install", "初始化资源", 0.5f); BuildDirectories(exist); EditorUtility.DisplayProgressBar("Module Install", "清空临时文件", 0.9f); BridgeExport.RemoveProjectCodeDir(); CleanTmpDirectory(); EditorUtility.ClearProgressBar(); }
protected override void DoExport() { var build = DirectoryBuilder.GetDirectory("build"); // check cache var projectDir = new DirectoryInfo(build["Project"].FullPath); // Debug.Log(projectDir.GetFiles().Length); if (!projectDir.Exists || projectDir.GetFiles() == null || projectDir.GetFiles().Length <= 1) { BridgeExport.ExportCodeMenu(); } // convert // BridgeExport.ExportCode(); // EditorUtility.ClearProgressBar(); // BridgeExport.isProcessing = false; EditorUtility.DisplayProgressBar("代码导出", "", 0.0f); var dirPath = BridgeExport.PROJECT_CODE_PATH; var files = Directory.EnumerateFiles(dirPath, "*.js", SearchOption.AllDirectories).ToList(); List <string> allRecursiveAssets = new List <string>(); // all converted scripts var t = 0; foreach (var file in files) { // bridge plugin blacklist var name = Path.GetFileName(file); // Debug.Log(name); // 使用引擎插件不打包这几个文件,以节省代码包体积 if (WXBridge.isWXBridgePlugin && ( name.Equals("minigame-adaptor-lib.js") || name.Equals("minigame-adaptor-lib.meta.js") || name.Equals("minigame-adaptor-lib-patch.js"))) { continue; } JSONObject metadata = new JSONObject(JSONObject.Type.OBJECT); metadata.AddField("version", 1); // string path = Path.GetFullPath(file).Replace(Path.Combine(Application.dataPath.Replace("Assets", ""), "__tmp_dist_script~"), "Assets"); var cutIndex = Path.GetFullPath(file).IndexOf(dirPath) + dirPath.Length + 1; // +1 : '/' string path = Path.GetFullPath(file).Substring(cutIndex).Replace('\\', '/'); // Debug.Log(path); // Debug.Log(file + "===" + path); // Debug.Log(path); string content = File.ReadAllText(file); ExportStore.AddTextFile(path, content, WXUtility.GetMD5FromString(content)); List <string> useFile = new List <string>(); useFile.Add(path); ExportStore.AddResource(path, "script", null, useFile); allRecursiveAssets.Add(path); EditorUtility.DisplayProgressBar("代码导出", "", t++ / files.Count); } // var libs = Directory.EnumerateFiles(Path.Combine(bridgeRootPath, "lib"), "*.lib"); var libs = Directory.EnumerateFiles(DirectoryBuilder.GetDirectory("references")["Adaptor"].FullPath, "*.lib"); // Debug.Log(libs); foreach (var lib in libs) { var name = Path.GetFileName(lib); // Debug.Log(name); // bridge plugin blacklist // 使用引擎插件的情况 if (WXBridge.isWXBridgePlugin) { // 如果使用了插件但是要用自己的adaptor.js,这个文件也要打包 if (!WXBridge.isWXBridgePluginAdaptor) { if (!name.Equals("minigame-adaptor-util.js.lib") && !name.Equals("minigame-adaptor-config.js.lib") && !name.Equals("minigame-adaptor.js.lib")) { continue; } } else { if (!name.Equals("minigame-adaptor-util.js.lib") && !name.Equals("minigame-adaptor-config.js.lib")) { continue; } } } JSONObject metadata = new JSONObject(JSONObject.Type.OBJECT); metadata.AddField("version", 1); string path = name.Substring(0, name.Length - 4); // 配置文件内容根据插件的配置来生成 if (name.Equals("minigame-adaptor-config.js.lib")) { // var content = String.Format("module.exports = {{\r\n userMiniGameAdaptorPlugin:{0},\r\n userMiniGameAdaptorJs:{1},\r\n pluginAlias:'WXBridge'\r\n}}", WXBridge.isWXBridgePlugin ? 1 : 0, WXBridge.isWXBridgePluginAdaptor ? 1 : 0); var content = ScriptExportHelper.ExportGameConfig(); ExportStore.AddTextFile(path, content, WXUtility.GetMD5FromString(content)); } else { string content = File.ReadAllText(lib); ExportStore.AddTextFile(path, content, WXUtility.GetMD5FromString(content)); } List <string> useFile = new List <string>(); useFile.Add(path); ExportStore.AddResource(path, "script", null, useFile); allRecursiveAssets.Add(path); } // game config js // { // JSONObject metadata = new JSONObject(JSONObject.Type.OBJECT); // metadata.AddField("version", 1); // string path = "Assets/bridge_game_config.js"; // JSONObject content = ScriptExportHelper.ExportSceneJson(); // WXExportStore.AddJSONFile(path, content, WXUtility.GetMD5FromString(content.ToString())); // List<string> useFile = new List<string>(); // useFile.Add(path); // WXExportStore.AddResource(path, "script", null, useFile); // allRecursiveAssets.Add(path); // } //string savePath = Path.Combine(SAVE_BASE_PATH, "Scripts.mgepackage/"); //JSONObject manifestRoot = new JSONObject(JSONObject.Type.OBJECT); //manifestRoot.AddField("resourceMeta", exportContext.writeResourcesTo(savePath, allRecursiveAssets)); //wxFileUtil.SaveJsonFile(manifestRoot, savePath + "group.manifest.json"); ExportStore.GenerateResourcePackage( "WXScripts", allRecursiveAssets ); EditorUtility.ClearProgressBar(); Debug.Log("导出工程代码: 1"); }
private static void IterateBridgeComponent(GameObject go, WXEntity obj, WXHierarchyContext context, ExportPreset preset) { if (preset.presetKey == "ngui-prefab" || preset.presetKey == "ngui-asset" || preset.presetKey == "ngui-prefabfolder" || preset.presetKey == "ngui-rootScene") { WXBridge.isNGUIPreset = true; } if (preset.presetKey == "ugui-prefab" || preset.presetKey == "ugui-asset" || preset.presetKey == "ugui-prefabfolder" || preset.presetKey == "ugui-rootScene") { WXBridge.isUGUIPreset = true; } var monoBehaviours = go.GetComponents <MonoBehaviour>(); foreach (var behaviour in monoBehaviours) { // 处理用户脚本丢失的情况 if (behaviour == null) { continue; } // user's MonoBehaviour or not? if (!BridgeExport.GetDevTypesSet().Contains(behaviour.GetType())) { continue; } if (WXMonoBehaviourExportHelper.IsInBlackList(behaviour.GetType())) { continue; } obj.components.Add(context.AddComponent(new WXEngineMonoBehaviour(behaviour), behaviour)); } // for a ngui-prefab, we don't need to export any other components if (WXBridge.isNGUIPreset) { return; } if (WXBridge.isUGUIPreset) { return; } /** * 下面的Component为adaptor对齐unity独有的组件 * 需要根据对应类型新建一个对应的Component的class */ // Colliders Collider[] colliders = go.GetComponents <Collider>(); if (colliders != null && colliders.Length > 0) { foreach (var collider in colliders) { if (collider is BoxCollider) { //obj.components.Add(context.AddComponent(new WXBoxCollider((BoxCollider)collider), collider)); obj.components.Add(context.AddComponent(new WXUnityComponent(collider), collider)); } else if (collider is SphereCollider) { //obj.components.Add(context.AddComponent(new WXSphereCollider((SphereCollider)collider), collider)); obj.components.Add(context.AddComponent(new WXUnityComponent(collider), collider)); } else if (collider is CapsuleCollider) { //obj.components.Add(context.AddComponent(new WXCapsuleCollider((CapsuleCollider)collider), collider)); obj.components.Add(context.AddComponent(new WXUnityComponent(collider), collider)); } else if (collider is MeshCollider) { //obj.components.Add(context.AddComponent(new WXMeshCollider((MeshCollider)collider), collider)); obj.components.Add(context.AddComponent(new WXUnityComponent(collider), collider)); } } } // AudioSource(s) AudioSource[] audioSources = go.GetComponents <AudioSource>(); if (audioSources != null && audioSources.Length > 0) { foreach (var audioSource in audioSources) { obj.components.Add(context.AddComponent(new WXEngineAudioSource(audioSource), audioSource)); } } Rigidbody rigidbody = go.GetComponent <Rigidbody>(); if (rigidbody != null) { //obj.components.Add(context.AddComponent(new WXRigidbody(rigidbody), rigidbody)); obj.components.Add(context.AddComponent(new WXUnityComponent(rigidbody), rigidbody)); } /** * 下面的Component为adaptor对齐unity,但引擎也有类似Component的组件 * 需要在WXUnityComponent中对应做处理,增加ref对象指向对应引擎对象 */ obj.components.Add(context.AddComponent(new WXUnityComponent(go.transform), go.transform)); // Particle System ParticleSystem particle = go.GetComponent <ParticleSystem>(); if (particle != null) { //Debug.Log("addComponentParticleSystem"); obj.components.Add(context.AddComponent(new WXUnityComponent(particle), particle)); } // Animator Animator animator = go.GetComponent <Animator>(); if (animator != null) { obj.components.Add(context.AddComponent(new WXUnityComponent(animator), animator)); } // Animation Animation animation = go.GetComponent <Animation>(); if (animation != null) { obj.components.Add(context.AddComponent(new WXUnityComponent(animation), animation)); } // Renderers Renderer renderer = go.GetComponent <Renderer>(); if (renderer != null) { if (renderer is MeshRenderer) { obj.components.Add(context.AddComponent(new WXUnityComponent((MeshRenderer)renderer), renderer)); // 由于引擎没有MeshFilter组件,这里强制在导出MeshRenderer的时候带上一个MeshFilter obj.components.Add(context.AddComponent(new WXMeshFilter(), renderer)); } else if (renderer is LineRenderer) { obj.components.Add(context.AddComponent(new WXUnityComponent((LineRenderer)renderer), renderer)); } else if (renderer is SkinnedMeshRenderer) { obj.components.Add(context.AddComponent(new WXUnityComponent((SkinnedMeshRenderer)renderer), renderer)); obj.components.Add(context.AddComponent(new WXMeshFilter(), renderer)); } } // Camera Camera camera = go.GetComponent <Camera>(); if (camera != null) { obj.components.Add(context.AddComponent(new WXUnityComponent(camera), camera)); } // Light Light light = go.GetComponent <Light>(); if (light != null) { obj.components.Add(context.AddComponent(new WXUnityComponent(light), light)); } }