随包资源管理窗口添加

This commit is contained in:
ALIENJACK\alien 2025-08-12 18:25:57 +08:00
parent 7b39db64f8
commit b997f8266e
2 changed files with 115 additions and 0 deletions

View File

@ -0,0 +1,104 @@
using System;
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
using VersionFlow.Runtime;
namespace VersionFlow.Editors
{
public class SetupInstallBundle : EditorWindow
{
Dictionary<string, List<Bundle>> fetchBundles = new Dictionary<string, List<Bundle>>();
HashSet<Bundle> selectBundles = new HashSet<Bundle>();
[MenuItem("VersionFlow/设置随包资源")]
public static void Open()
{
EditorWindow.GetWindow<SetupInstallBundle>().Show();
}
void OnGUI()
{
if (GUILayout.Button("拉取资源清单"))
{
FetchRemoteManifest();
}
DrawBundleGroup();
}
private void DrawBundleGroup()
{
foreach (var item in fetchBundles)
{
EditorGUILayout.LabelField($"{item.Key}", new GUIStyle(EditorStyles.largeLabel));
EditorGUILayout.BeginVertical(EditorStyles.helpBox);
{
foreach (var bundle in item.Value)
DrawBundleItem(bundle);
}
EditorGUILayout.EndVertical();
}
}
private void DrawBundleItem(Bundle bundle)
{
using (new EditorGUILayout.HorizontalScope())
{
GUILayout.Space(20);
var rect = GUILayoutUtility.GetLastRect();
rect.height = 20;
rect.width = 20;
if (bundle.InstallBundle)
{
GUI.DrawTexture(rect, EditorGUIUtility.FindTexture("d_UnityLogo"));
}
EditorGUILayout.LabelField(bundle.BundleName, new GUIStyle(EditorStyles.boldLabel));
var rect1 = GUILayoutUtility.GetLastRect();
EditorGUILayout.LabelField($"{GetByteSizeString(bundle.Size)}", new GUIStyle(EditorStyles.label) { alignment = TextAnchor.MiddleRight });
var rect2 = GUILayoutUtility.GetLastRect();
var clickRegionRect = new Rect(rect.x, rect.y, rect.width + rect1.width + rect2.width, rect1.height + 4);
EditorGUI.DrawRect(clickRegionRect, selectBundles.Contains(bundle) ? new Color(0, 1, 1, 0.2f) : new Color(0, 0, 0, 0));
}
}
private void FetchRemoteManifest()
{
fetchBundles.Clear();
var builder = PatchUploaderUtility.FindBuilderInProject();
var remoteInfo = BuilderConfigEditor.FetchRemoteVersion(builder);
foreach (var bundle in remoteInfo.remoteVersion.Bundles)
{
if (!fetchBundles.TryGetValue(bundle.Group, out List<Bundle> list))
{
list = new List<Bundle>();
fetchBundles[bundle.Group] = list;
if (bundle.InstallBundle)
selectBundles.Add(bundle);
}
list.Add(bundle);
}
}
public static void PerformInstallBundles()
{
var builder = PatchUploaderUtility.FindBuilderInProject();
BuilderConfigEditor.SetInstallBundles(builder, false);
}
private static string GetByteSizeString(long byteCount)
{
if (byteCount < 1024) return $"{byteCount}B";
if (byteCount < 1024 * 1024) return $"{byteCount / (1024f):.00}KB";
else return $"{byteCount / (1024f * 1024):.00}MB";
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 8a34a43d30d215c43a260ffffab68322
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: