update space shooter

This commit is contained in:
何冠峰
2025-04-17 14:16:56 +08:00
parent 06a5c90b23
commit b2c9cb3a7e
20 changed files with 264 additions and 1 deletions
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 93fb052359d809247bd6669f2b989ddd
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,70 @@
using System.IO;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.U2D;
public static class UIPanelModifier
{
/// <summary>
/// 刷新面板清单
/// </summary>
public static void Refresh(PanelManifest manifest)
{
CacheReferenceAtals(manifest);
}
/// <summary>
/// 更新组件
/// </summary>
private static void CacheReferenceAtals(PanelManifest manifest)
{
manifest.ReferencesAtlas.Clear();
string spriteDirectory = UIPanelSettings.GetSpriteDirecotry();
string altasDirectory = UIPanelSettings.GetAtlasDirecotry();
// 获取依赖的图集名称
Transform root = manifest.transform;
Image[] allImage = root.GetComponentsInChildren<Image>(true);
for (int i = 0; i < allImage.Length; i++)
{
Image image = allImage[i];
if (image.sprite == null)
continue;
// 文件路径
string spriteAssetPath = UnityEditor.AssetDatabase.GetAssetPath(image.sprite);
// 跳过系统内置资源
if (spriteAssetPath.Contains("_builtin_"))
continue;
// 跳过非图集精灵
if (spriteAssetPath.StartsWith(spriteDirectory) == false)
continue;
string atlasAssetPath = GetAtlasPath(altasDirectory, spriteAssetPath);
SpriteAtlas spriteAtlas = UnityEditor.AssetDatabase.LoadAssetAtPath<SpriteAtlas>(atlasAssetPath);
if (spriteAtlas == null)
{
throw new System.Exception($"Not found SpriteAtlas : {atlasAssetPath}");
}
else
{
if (manifest.ReferencesAtlas.Contains(spriteAtlas) == false)
manifest.ReferencesAtlas.Add(spriteAtlas);
}
}
}
/// <summary>
/// 获取精灵所属图集
/// </summary>
private static string GetAtlasPath(string atlasDirectory, string assetPath)
{
string directory = Path.GetDirectoryName(assetPath);
DirectoryInfo directoryInfo = new DirectoryInfo(directory);
string atlasName = directoryInfo.Name;
return $"{atlasDirectory}/{atlasName}.spriteatlas";
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6076577ae87253845a16ec633f38704c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,29 @@
using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;
public class UIPanelMonitor : UnityEditor.Editor
{
[InitializeOnLoadMethod]
static void StartInitializeOnLoadMethod()
{
PrefabStage.prefabSaving += OnPrefabSaving;
}
static void OnPrefabSaving(GameObject go)
{
PrefabStage stage = PrefabStageUtility.GetCurrentPrefabStage();
if (stage != null)
{
string panelDirectory = UIPanelSettings.GetPanelDirecotry();
if (stage.assetPath.StartsWith(panelDirectory))
{
PanelManifest manifest = go.GetComponent<PanelManifest>();
if (manifest == null)
manifest = go.AddComponent<PanelManifest>();
UIPanelModifier.Refresh(manifest);
}
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6bed3b2eaa555ec4e9aaa22a888b504c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,49 @@
using UnityEngine;
using UnityEditor;
public static class UIPanelSettings
{
/// <summary>
/// 面板文件夹GUID
/// </summary>
private const string UIPanelDirectoryGUID = "12d33f33f3a55224c9c747d7bffa1c68";
/// <summary>
/// 精灵文件夹GUID
/// </summary>
private const string UISpriteDirectoryGUID = "935d7f20c085cc141a3daf9cacfabfae";
/// <summary>
/// 图集文件夹GUID
/// </summary>
private const string UIAtlasDirectoryGUID = "c355c783476322b4cacac98c5e1b46d8";
public static string GetPanelDirecotry()
{
string result = AssetDatabase.GUIDToAssetPath(UIPanelDirectoryGUID);
if (string.IsNullOrEmpty(result))
{
throw new System.Exception($"Can not found panel direcotry : {UIPanelDirectoryGUID}");
}
return result;
}
public static string GetSpriteDirecotry()
{
string result = AssetDatabase.GUIDToAssetPath(UISpriteDirectoryGUID);
if (string.IsNullOrEmpty(result))
{
throw new System.Exception($"Can not found sprite direcotry : {UISpriteDirectoryGUID}");
}
return result;
}
public static string GetAtlasDirecotry()
{
string result = AssetDatabase.GUIDToAssetPath(UIAtlasDirectoryGUID);
if (string.IsNullOrEmpty(result))
{
throw new System.Exception($"Can not found atlas direcotry : {UIAtlasDirectoryGUID}");
}
return result;
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 603a8486cd52506408bf1eb6a80588b6
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: