mirror of https://github.com/tuyoogame/YooAsset
110 lines
3.5 KiB
C#
110 lines
3.5 KiB
C#
|
using System.IO;
|
|||
|
using UnityEngine;
|
|||
|
using UnityEditor;
|
|||
|
|
|||
|
namespace YooAsset.Editor
|
|||
|
{
|
|||
|
public class PatchImportWindow : EditorWindow
|
|||
|
{
|
|||
|
static PatchImportWindow _thisInstance;
|
|||
|
|
|||
|
[MenuItem("YooAsset/补丁包导入工具", false, 301)]
|
|||
|
static void ShowWindow()
|
|||
|
{
|
|||
|
if (_thisInstance == null)
|
|||
|
{
|
|||
|
_thisInstance = EditorWindow.GetWindow(typeof(PatchImportWindow), false, "补丁包导入工具", true) as PatchImportWindow;
|
|||
|
_thisInstance.minSize = new Vector2(800, 600);
|
|||
|
}
|
|||
|
_thisInstance.Show();
|
|||
|
}
|
|||
|
|
|||
|
private string _patchManifestPath = string.Empty;
|
|||
|
|
|||
|
private void OnGUI()
|
|||
|
{
|
|||
|
GUILayout.Space(10);
|
|||
|
EditorGUILayout.BeginHorizontal();
|
|||
|
if (GUILayout.Button("选择补丁包", GUILayout.MaxWidth(150)))
|
|||
|
{
|
|||
|
string resultPath = EditorUtility.OpenFilePanel("Find", "Assets/", "bytes");
|
|||
|
if (string.IsNullOrEmpty(resultPath))
|
|||
|
return;
|
|||
|
_patchManifestPath = resultPath;
|
|||
|
}
|
|||
|
EditorGUILayout.LabelField(_patchManifestPath);
|
|||
|
EditorGUILayout.EndHorizontal();
|
|||
|
|
|||
|
if (string.IsNullOrEmpty(_patchManifestPath) == false)
|
|||
|
{
|
|||
|
if (GUILayout.Button("导入补丁包(内置文件)", GUILayout.MaxWidth(150)))
|
|||
|
{
|
|||
|
AssetBundleBuilderHelper.ClearStreamingAssetsFolder();
|
|||
|
CopyPatchFiles(_patchManifestPath, false);
|
|||
|
}
|
|||
|
if (GUILayout.Button("导入补丁包(全部文件)", GUILayout.MaxWidth(150)))
|
|||
|
{
|
|||
|
AssetBundleBuilderHelper.ClearStreamingAssetsFolder();
|
|||
|
CopyPatchFiles(_patchManifestPath, true);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private void CopyPatchFiles(string patchManifestFilePath, bool allPatchFile)
|
|||
|
{
|
|||
|
string manifestFileName = Path.GetFileNameWithoutExtension(patchManifestFilePath);
|
|||
|
string outputDirectory = Path.GetDirectoryName(patchManifestFilePath);
|
|||
|
|
|||
|
// 加载补丁清单
|
|||
|
string jsonData = FileUtility.ReadFile(patchManifestFilePath);
|
|||
|
PatchManifest patchManifest = PatchManifest.Deserialize(jsonData);
|
|||
|
|
|||
|
// 拷贝核心文件
|
|||
|
{
|
|||
|
string sourcePath = $"{outputDirectory}/{manifestFileName}.bytes";
|
|||
|
string destPath = $"{AssetBundleBuilderHelper.GetStreamingAssetsFolderPath()}/{manifestFileName}.bytes";
|
|||
|
EditorTools.CopyFile(sourcePath, destPath, true);
|
|||
|
}
|
|||
|
{
|
|||
|
string sourcePath = $"{outputDirectory}/{manifestFileName}.hash";
|
|||
|
string destPath = $"{AssetBundleBuilderHelper.GetStreamingAssetsFolderPath()}/{manifestFileName}.hash";
|
|||
|
EditorTools.CopyFile(sourcePath, destPath, true);
|
|||
|
}
|
|||
|
{
|
|||
|
string sourcePath = $"{outputDirectory}/{YooAssetSettings.VersionFileName}";
|
|||
|
string destPath = $"{AssetBundleBuilderHelper.GetStreamingAssetsFolderPath()}/{YooAssetSettings.VersionFileName}";
|
|||
|
EditorTools.CopyFile(sourcePath, destPath, true);
|
|||
|
}
|
|||
|
|
|||
|
// 拷贝文件列表
|
|||
|
int fileCount = 0;
|
|||
|
|
|||
|
if (allPatchFile)
|
|||
|
{
|
|||
|
foreach (var patchBundle in patchManifest.BundleList)
|
|||
|
{
|
|||
|
fileCount++;
|
|||
|
string sourcePath = $"{outputDirectory}/{patchBundle.Hash}";
|
|||
|
string destPath = $"{AssetBundleBuilderHelper.GetStreamingAssetsFolderPath()}/{patchBundle.Hash}";
|
|||
|
EditorTools.CopyFile(sourcePath, destPath, true);
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
foreach (var patchBundle in patchManifest.BundleList)
|
|||
|
{
|
|||
|
if (patchBundle.IsBuildin == false)
|
|||
|
continue;
|
|||
|
|
|||
|
fileCount++;
|
|||
|
string sourcePath = $"{outputDirectory}/{patchBundle.Hash}";
|
|||
|
string destPath = $"{AssetBundleBuilderHelper.GetStreamingAssetsFolderPath()}/{patchBundle.Hash}";
|
|||
|
EditorTools.CopyFile(sourcePath, destPath, true);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
Debug.Log($"补丁包拷贝完成,一共拷贝了{fileCount}个资源文件");
|
|||
|
AssetDatabase.Refresh();
|
|||
|
}
|
|||
|
}
|
|||
|
}
|