public static void BuildPlayer() { var outputPath = EditorUtility.SaveFolderPanel("Choose Location of the Built Game", "", ""); if (outputPath.Length == 0) { return; } string[] levels = GetLevelsFromBuildSettings(); if (levels.Length == 0) { Debug.Log("Nothing to build."); return; } string targetName = GetBuildTargetName(EditorUserBuildSettings.activeBuildTarget); if (targetName == null) { return; } // Build and copy AssetBundles. BuildScript.BuildAssetBundles(); BuildScript.CopyAssetBundlesTo(Path.Combine(Application.streamingAssetsPath, kAssetBundlesOutputPath)); BuildOptions option = EditorUserBuildSettings.development ? BuildOptions.Development : BuildOptions.None; BuildPipeline.BuildPlayer(levels, outputPath + targetName, EditorUserBuildSettings.activeBuildTarget, option); }
// version xml file /////////////////////////////////////////////////////// /////////////////////////////////////////////////////// // assets xml file void SaveAssetsXML(List <FileInfo> listNew, List <FileInfo> listModify, List <FileInfo> listRemoved) { XmlDocument xmlDoc = new XmlDocument(); XmlNode root = xmlDoc.CreateXmlDeclaration("1.0", "UTF-8", null); xmlDoc.AppendChild(root); XmlNode nodeMain = xmlDoc.CreateElement("AssetBundles"); XmlNode nodeVer = xmlDoc.CreateElement("VERSION"); XmlAttribute attrVer = xmlDoc.CreateAttribute("value"); attrVer.Value = "VER_" + lastMajorVersion.ToString("D2") + "_" + lastMinorVersion.ToString("D3"); nodeVer.Attributes.Append(attrVer); nodeMain.AppendChild(nodeVer); { XmlNode nodeCreate = xmlDoc.CreateElement("CREATE"); foreach (FileInfo info in listNew) { XmlNode nodeFILE = xmlDoc.CreateElement("FILE"); XmlAttribute attrName = xmlDoc.CreateAttribute("name"); attrName.Value = info.Name; nodeFILE.Attributes.Append(attrName); nodeCreate.AppendChild(nodeFILE); } nodeMain.AppendChild(nodeCreate); } { XmlNode nodeModify = xmlDoc.CreateElement("MODIFY"); foreach (FileInfo info in listModify) { XmlNode nodeFILE = xmlDoc.CreateElement("FILE"); XmlAttribute attrName = xmlDoc.CreateAttribute("name"); attrName.Value = info.Name; nodeFILE.Attributes.Append(attrName); nodeModify.AppendChild(nodeFILE); } nodeMain.AppendChild(nodeModify); } { XmlNode nodeRemove = xmlDoc.CreateElement("REMOVE"); foreach (FileInfo info in listRemoved) { XmlNode nodeFILE = xmlDoc.CreateElement("FILE"); XmlAttribute attrName = xmlDoc.CreateAttribute("name"); attrName.Value = info.Name; nodeFILE.Attributes.Append(attrName); nodeRemove.AppendChild(nodeFILE); } nodeMain.AppendChild(nodeRemove); } xmlDoc.AppendChild(nodeMain); string xmlFullpath = CommonPatcherData.repoPath + "/" + EditorUserBuildSettings.activeBuildTarget + "/" + "VER_" + lastMajorVersion.ToString("D2") + "/" + lastMinorVersion.ToString("D3") + "/" + CommonPatcherData.assetbundleFN; XmlTool.writeXml(xmlFullpath, xmlDoc); // backup all AssetBundles from "repopath/ostype/latest/" to "repopath/ostype/latest_ver_XX_XXX" string latest = CommonPatcherData.repoPath + "/" + EditorUserBuildSettings.activeBuildTarget + "/" + CommonPatcherData.lastVersionRepo; string backuppath = CommonPatcherData.repoPath + "/" + EditorUserBuildSettings.activeBuildTarget + "/" + CommonPatcherData.lastVersionRepo + "_VER_" + lastMajorVersion.ToString("D2") + "_" + lastMinorVersion.ToString("D3"); if (lastMajorVersion != 0 || lastMinorVersion != 0) { //Directory.CreateDirectory(backuppath); Directory.Move(latest, backuppath); Directory.CreateDirectory(latest); } // copy all AssetBundles to "repopath/ostype/latest/" BuildScript.CopyAssetBundlesTo(CommonPatcherData.repoPath + "/" + EditorUserBuildSettings.activeBuildTarget + "/" + CommonPatcherData.lastVersionRepo); // copy some assetbundles for patching to "repopath/ostype/ver_xx/xxx/ string vertargetPath = CommonPatcherData.repoPath + "/" + EditorUserBuildSettings.activeBuildTarget + "/" + "VER_" + lastMajorVersion.ToString("D2") + "/" + lastMinorVersion.ToString("D3"); foreach (FileInfo info in listNew) { File.Copy(info.FullName, vertargetPath + "/" + info.Name); } foreach (FileInfo info in listModify) { File.Copy(info.FullName, vertargetPath + "/" + info.Name); } foreach (FileInfo info in listRemoved) { File.Copy(info.FullName, vertargetPath + "/" + info.Name); } }