更新结算界面

This commit is contained in:
2026-07-04 14:45:52 +08:00
parent 0b6dc2653f
commit 08dec79a6e
28 changed files with 3022 additions and 5289 deletions
+226 -1
View File
@@ -9,12 +9,13 @@ using GameFramework;
/// </summary>
public static class UIBuilder
{
[MenuItem("Tools/搭建游戏UI (HUD + ResultScreen + MainMenu)")]
[MenuItem("Tools/搭建游戏UI (HUD + ResultScreen + MainMenu + Scoring)")]
public static void BuildAll()
{
BuildMainMenu();
BuildHUD();
BuildResultScreen();
BuildScoringUI();
Debug.Log("[UIBuilder] 全部 UI 搭建完成!请在 Inspector 中检查引用是否正确。");
}
@@ -457,4 +458,228 @@ public static class UIBuilder
img.color = bgColor;
return panel;
}
/// <summary>
/// 在 Scoring 场景中搭建结算界面 Canvas。
/// </summary>
[MenuItem("Tools/搭建 Scoring Canvas")]
public static void BuildScoringUI()
{
// 加载美术资源
var bgSprite = AssetDatabase.LoadAssetAtPath<Sprite>("Assets/UI/Art/ResultScreen/bg.png");
var winTitleSprite = AssetDatabase.LoadAssetAtPath<Sprite>("Assets/UI/Art/ResultScreen/nizuodaol.png");
var newRecordSprite = AssetDatabase.LoadAssetAtPath<Sprite>("Assets/UI/Art/ResultScreen/新纪录.png");
var scoreLabelSprite = AssetDatabase.LoadAssetAtPath<Sprite>("Assets/UI/Art/ResultScreen/拯救魂灵.png");
var mainMenuBtnSprite = AssetDatabase.LoadAssetAtPath<Sprite>("Assets/UI/Art/ResultScreen/主界面.png");
var lineSprite = AssetDatabase.LoadAssetAtPath<Sprite>("Assets/UI/Art/ResultScreen/line.png");
var bgPointSprite = AssetDatabase.LoadAssetAtPath<Sprite>("Assets/UI/Art/ResultScreen/bgpoint.png");
// 创建 Scoring Canvas
var canvasObj = new GameObject("ScoringCanvas");
var canvas = canvasObj.AddComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
canvas.sortingOrder = 0;
var scaler = canvasObj.AddComponent<CanvasScaler>();
scaler.uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
scaler.referenceResolution = new Vector2(1920, 1080);
canvasObj.AddComponent<GraphicRaycaster>();
// 添加 ScoringUIController 脚本
var controller = canvasObj.AddComponent<ScoringUIController>();
var so = new SerializedObject(controller);
// ===== 底图 =====
var bgObj = new GameObject("Background");
bgObj.transform.SetParent(canvasObj.transform, false);
var bgImg = bgObj.AddComponent<Image>();
if (bgSprite != null) bgImg.sprite = bgSprite;
bgImg.preserveAspect = false;
var bgRect = bgObj.GetComponent<RectTransform>();
bgRect.anchorMin = Vector2.zero;
bgRect.anchorMax = Vector2.one;
bgRect.sizeDelta = Vector2.zero;
so.FindProperty("bgImage").objectReferenceValue = bgImg;
so.FindProperty("bgSprite").objectReferenceValue = bgSprite;
// ===== 胜利面板 =====
var winPanel = new GameObject("WinPanel");
winPanel.transform.SetParent(canvasObj.transform, false);
var winRect = winPanel.AddComponent<RectTransform>();
winRect.anchorMin = Vector2.zero;
winRect.anchorMax = Vector2.one;
winRect.sizeDelta = Vector2.zero;
winPanel.SetActive(false);
// "你做到了" 标题
var winTitle = CreateImageChild(winPanel.transform, "WinTitle", winTitleSprite, new Vector2(400, 80), new Vector2(0.5f, 0.75f));
so.FindProperty("winTitleImage").objectReferenceValue = winTitle.GetComponent<Image>();
so.FindProperty("winTitleSprite").objectReferenceValue = winTitleSprite;
// 魂灵数量底图
var soulBg = CreateImageChild(winPanel.transform, "SoulCountBg", bgPointSprite, new Vector2(200, 50), new Vector2(0.5f, 0.55f));
so.FindProperty("soulCountBgImage").objectReferenceValue = soulBg.GetComponent<Image>();
so.FindProperty("soulCountBgSprite").objectReferenceValue = bgPointSprite;
// 魂灵数量文字
var soulText = CreateText(winPanel.transform, "SoulCountText", "0", 36, TextAnchor.MiddleCenter);
var soulTextRect = soulText.GetComponent<RectTransform>();
soulTextRect.anchorMin = new Vector2(0.5f, 0.55f);
soulTextRect.anchorMax = new Vector2(0.5f, 0.55f);
soulTextRect.sizeDelta = new Vector2(100, 50);
so.FindProperty("soulCountText").objectReferenceValue = soulText.GetComponent<Text>();
// 新记录图片
var newRecord = CreateImageChild(winPanel.transform, "NewRecord", newRecordSprite, new Vector2(150, 40), new Vector2(0.5f, 0.45f));
newRecord.SetActive(false);
so.FindProperty("newRecordImage").objectReferenceValue = newRecord.GetComponent<Image>();
so.FindProperty("newRecordSprite").objectReferenceValue = newRecordSprite;
// 拯救魂灵标签
var scoreLabel = CreateImageChild(winPanel.transform, "ScoreLabel", scoreLabelSprite, new Vector2(200, 40), new Vector2(0.5f, 0.65f));
so.FindProperty("scoreLabelImage").objectReferenceValue = scoreLabel.GetComponent<Image>();
so.FindProperty("scoreLabelSprite").objectReferenceValue = scoreLabelSprite;
so.FindProperty("winPanel").objectReferenceValue = winPanel;
// ===== 失败面板 =====
var losePanel = new GameObject("LosePanel");
losePanel.transform.SetParent(canvasObj.transform, false);
var loseRect = losePanel.AddComponent<RectTransform>();
loseRect.anchorMin = Vector2.zero;
loseRect.anchorMax = Vector2.one;
loseRect.sizeDelta = Vector2.zero;
losePanel.SetActive(false);
// "你迷失了" 标题(暂用 nizuodaol.png 副本)
var loseTitle = CreateImageChild(losePanel.transform, "LoseTitle", winTitleSprite, new Vector2(400, 80), new Vector2(0.5f, 0.6f));
so.FindProperty("loseTitleImage").objectReferenceValue = loseTitle.GetComponent<Image>();
so.FindProperty("loseTitleSprite").objectReferenceValue = winTitleSprite;
so.FindProperty("losePanel").objectReferenceValue = losePanel;
// ===== 排行榜面板 =====
var lbPanel = new GameObject("LeaderboardPanel");
lbPanel.transform.SetParent(canvasObj.transform, false);
var lbRect = lbPanel.AddComponent<RectTransform>();
lbRect.anchorMin = new Vector2(0.3f, 0.1f);
lbRect.anchorMax = new Vector2(0.7f, 0.4f);
lbRect.sizeDelta = Vector2.zero;
lbPanel.SetActive(false);
so.FindProperty("leaderboardPanel").objectReferenceValue = lbPanel;
// 最终分数
var finalScore = CreateText(lbPanel.transform, "FinalScore", "0", 24, TextAnchor.MiddleCenter);
finalScore.GetComponent<RectTransform>().anchoredPosition = new Vector2(0, 0);
so.FindProperty("finalScoreText").objectReferenceValue = finalScore.GetComponent<Text>();
// 排行榜容器
var lbContainer = new GameObject("LeaderboardContainer");
lbContainer.transform.SetParent(lbPanel.transform, false);
var lbContRect = lbContainer.AddComponent<RectTransform>();
lbContRect.anchorMin = Vector2.zero;
lbContRect.anchorMax = Vector2.one;
lbContRect.sizeDelta = Vector2.zero;
var lbLayout = lbContainer.AddComponent<VerticalLayoutGroup>();
lbLayout.spacing = 2;
lbLayout.childForceExpandHeight = true;
so.FindProperty("leaderboardContainer").objectReferenceValue = lbContainer.transform;
// 创建10个排行榜条目
for (int i = 0; i < 10; i++)
{
var entry = new GameObject($"Entry_{i}");
entry.transform.SetParent(lbContainer.transform, false);
var entryLayout = entry.AddComponent<HorizontalLayoutGroup>();
entryLayout.spacing = 10;
entryLayout.childForceExpandWidth = true;
entryLayout.childForceExpandHeight = true;
CreateText(entry.transform, "Rank", $"{i + 1}.", 14, TextAnchor.MiddleCenter);
CreateText(entry.transform, "Score", "---", 14, TextAnchor.MiddleCenter);
CreateText(entry.transform, "Name", "---", 14, TextAnchor.MiddleCenter);
}
// ===== 新纪录输入面板 =====
var nhsPanel = new GameObject("NewHighScorePanel");
nhsPanel.transform.SetParent(canvasObj.transform, false);
var nhsRect = nhsPanel.AddComponent<RectTransform>();
nhsRect.anchorMin = new Vector2(0.3f, 0.3f);
nhsRect.anchorMax = new Vector2(0.7f, 0.5f);
nhsRect.sizeDelta = Vector2.zero;
nhsPanel.SetActive(false);
so.FindProperty("newHighScorePanel").objectReferenceValue = nhsPanel;
var nameInput = new GameObject("NameInput");
nameInput.transform.SetParent(nhsPanel.transform, false);
nameInput.AddComponent<RectTransform>().sizeDelta = new Vector2(200, 40);
nameInput.AddComponent<Image>().color = new Color(1, 1, 1, 0.8f);
var inputField = nameInput.AddComponent<InputField>();
var textArea = new GameObject("Text");
textArea.transform.SetParent(nameInput.transform, false);
var taRect = textArea.AddComponent<RectTransform>();
taRect.anchorMin = Vector2.zero;
taRect.anchorMax = Vector2.one;
taRect.sizeDelta = Vector2.zero;
var taText = textArea.AddComponent<Text>();
taText.text = "";
taText.alignment = TextAnchor.MiddleCenter;
taText.color = Color.black;
inputField.textComponent = taText;
so.FindProperty("nameInputField").objectReferenceValue = inputField;
var submitBtn = CreateButton(nhsPanel.transform, "SubmitButton", "提交", new Vector2(100, 40));
submitBtn.GetComponent<RectTransform>().anchoredPosition = new Vector2(-60, -50);
so.FindProperty("submitButton").objectReferenceValue = submitBtn.GetComponent<Button>();
var cancelBtn = CreateButton(nhsPanel.transform, "CancelButton", "取消", new Vector2(100, 40));
cancelBtn.GetComponent<RectTransform>().anchoredPosition = new Vector2(60, -50);
so.FindProperty("cancelButton").objectReferenceValue = cancelBtn.GetComponent<Button>();
// ===== 装饰 =====
var lineObj = CreateImageChild(canvasObj.transform, "Line", lineSprite, new Vector2(300, 4), new Vector2(0.5f, 0.5f));
so.FindProperty("lineImage").objectReferenceValue = lineObj.GetComponent<Image>();
so.FindProperty("lineSprite").objectReferenceValue = lineSprite;
var bgPointObj = CreateImageChild(canvasObj.transform, "BgPoint", bgPointSprite, new Vector2(60, 60), new Vector2(0.15f, 0.85f));
so.FindProperty("bgPointImage").objectReferenceValue = bgPointObj.GetComponent<Image>();
so.FindProperty("bgPointSprite").objectReferenceValue = bgPointSprite;
// ===== 返回主菜单按钮 =====
var menuBtn = CreateButton(canvasObj.transform, "MainMenuButton", "返回主菜单", new Vector2(160, 50));
var menuBtnRect = menuBtn.GetComponent<RectTransform>();
menuBtnRect.anchorMin = new Vector2(0.5f, 0.05f);
menuBtnRect.anchorMax = new Vector2(0.5f, 0.05f);
menuBtnRect.pivot = new Vector2(0.5f, 0.5f);
so.FindProperty("mainMenuButton").objectReferenceValue = menuBtn.GetComponent<Button>();
// 设置按钮图片
if (mainMenuBtnSprite != null)
{
var btnImg = menuBtn.GetComponent<Image>();
btnImg.sprite = mainMenuBtnSprite;
so.FindProperty("mainMenuButtonImage").objectReferenceValue = btnImg;
so.FindProperty("mainMenuBtnSprite").objectReferenceValue = mainMenuBtnSprite;
}
so.ApplyModifiedProperties();
Debug.Log("[UIBuilder] Scoring Canvas 搭建完成");
}
private static GameObject CreateImageChild(Transform parent, string name, Sprite sprite, Vector2 size, Vector2 anchor)
{
var obj = new GameObject(name);
obj.transform.SetParent(parent, false);
var rect = obj.AddComponent<RectTransform>();
rect.anchorMin = anchor;
rect.anchorMax = anchor;
rect.pivot = new Vector2(0.5f, 0.5f);
rect.sizeDelta = size;
var img = obj.AddComponent<Image>();
if (sprite != null)
{
img.sprite = sprite;
img.preserveAspect = true;
}
return obj;
}
}
+22 -10
View File
@@ -38,8 +38,8 @@ namespace IndianOceanAssets.Engine2_5D
[SerializeField, Range(0.01f, 1f)] private float lightSoftness = 0.35f;
[Header("遮罩平面跟随设置")]
[Tooltip("如果勾选,遮罩平面会跟随摄像机移动(适合大地图)")]
[SerializeField] private bool followCamera = true;
[Tooltip("遮罩平面跟随目标(留空则自动查找 Player 标签)。\n跟随玩家而非摄像机,确保光照精度始终一致。")]
[SerializeField] private Transform followTarget;
[SerializeField] private Transform maskPlane;
[SerializeField] private Vector3 maskOffset = new Vector3(0f, 5f, 0f);
[SerializeField] private float planeSize = 50f;
@@ -70,20 +70,24 @@ namespace IndianOceanAssets.Engine2_5D
_mainCamera = Camera.main;
UpdateMaterialProperties();
// 自动查找玩家作为跟随目标
if (followTarget == null)
{
var player = GameObject.FindWithTag("Player");
if (player != null)
followTarget = player.transform;
}
// 确保遮罩平面在所有Sprite之后渲染
if (maskPlane != null)
{
Renderer renderer = maskPlane.GetComponent<Renderer>();
if (renderer != null)
{
// 设置渲染队列为最后(Overlay之后)
renderer.sortingOrder = 9999;
// 如果使用MeshRenderer,设置material的渲染队列
if (renderer is MeshRenderer && darknessMaterial != null)
{
// 保持在Transparent之后
darknessMaterial.renderQueue = 3100; // Transparent+100
darknessMaterial.renderQueue = 3100;
}
}
}
@@ -130,9 +134,17 @@ namespace IndianOceanAssets.Engine2_5D
private void UpdateMaskPosition()
{
if (!followCamera || maskPlane == null || _mainCamera == null) return;
Vector3 camPos = _mainCamera.transform.position;
maskPlane.position = new Vector3(camPos.x + maskOffset.x, maskOffset.y, camPos.z + maskOffset.z);
if (maskPlane == null) return;
// 优先跟随玩家,回退到摄像机
Transform target = followTarget != null ? followTarget : _mainCamera?.transform;
if (target == null) return;
maskPlane.position = new Vector3(
target.position.x + maskOffset.x,
maskOffset.y,
target.position.z + maskOffset.z
);
}
// ===== 光源注册/注销 =====
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

@@ -0,0 +1,175 @@
fileFormatVersion: 2
guid: Bi5L5i/7UynlTS/PnW0zfG6nTezAUUPPq/iOfKo7W9+fgAKp80MErtc=
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
webStreaming: 0
priorityLevel: 0
uploadedMode: 2
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: HMIAndroid
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: OpenHarmony
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

@@ -0,0 +1,175 @@
fileFormatVersion: 2
guid: CXJJt3j+UHsY2aitHHcar2oFoQquPiOSPTfJzNLUOHz4odMqMjljfXI=
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
webStreaming: 0
priorityLevel: 0
uploadedMode: 2
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: HMIAndroid
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: OpenHarmony
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

@@ -0,0 +1,175 @@
fileFormatVersion: 2
guid: CXwevCipASjV9eTEW5Cdf8VZhVBZYbH9LHO+Q20V25eGOtnUTNWekXA=
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
webStreaming: 0
priorityLevel: 0
uploadedMode: 2
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: HMIAndroid
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: OpenHarmony
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

@@ -0,0 +1,175 @@
fileFormatVersion: 2
guid: XHNJtHz8Bnm8Rrjurjfdq92iLlORRKvHaXnhhc/yaGzRDyi/R586Jd0=
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
webStreaming: 0
priorityLevel: 0
uploadedMode: 2
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: HMIAndroid
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: OpenHarmony
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

@@ -0,0 +1,175 @@
fileFormatVersion: 2
guid: WXoatSysB3+YCu7KeB0F8fFnYVz3QTNgOTe2IzWjD5XnJ1DNv15SAew=
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
webStreaming: 0
priorityLevel: 0
uploadedMode: 2
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: HMIAndroid
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: OpenHarmony
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

@@ -0,0 +1,175 @@
fileFormatVersion: 2
guid: B3kasX+rACk9k7AhAbac1WZcAaM2U6vQUXE2f5lb0cVMhN4nNh17qxk=
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
webStreaming: 0
priorityLevel: 0
uploadedMode: 2
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: HMIAndroid
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: OpenHarmony
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

@@ -0,0 +1,175 @@
fileFormatVersion: 2
guid: WSsdvCykUHoL/HutQY2YDz3Un1esbQFM/43MTx1oUoBq8ypAWvPz/QM=
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
webStreaming: 0
priorityLevel: 0
uploadedMode: 2
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: HMIAndroid
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: OpenHarmony
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

@@ -0,0 +1,175 @@
fileFormatVersion: 2
guid: CHwcvSr/Vn+BB2PFPNsMLKxpXB/txdbpe3qv7/u928xFThoIvXfpzsk=
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
webStreaming: 0
priorityLevel: 0
uploadedMode: 2
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: HMIAndroid
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: OpenHarmony
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 MiB

@@ -0,0 +1,175 @@
fileFormatVersion: 2
guid: DCxL4XyvAioAvh1g/bsqnl66ZLm7SsrvsZR8q45v1QFNnGUNpy3qaKM=
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
webStreaming: 0
priorityLevel: 0
uploadedMode: 2
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 1
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 3
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Standalone
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Server
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: Android
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: HMIAndroid
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: OpenHarmony
maxTextureSize: 2048
maxPlaceholderSize: 32
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable: {}
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
+172
View File
@@ -0,0 +1,172 @@
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
namespace GameFramework
{
/// <summary>
/// 调试工具 —— 在 Gameplay 场景中显示"胜利"和"失败"按钮,
/// 点击后直接触发 GameManager.Win() 或 GameManager.GameOver()。
/// 测试完成后删除此脚本。
/// </summary>
public class DebugResultButtons : MonoBehaviour
{
private string _debugLog = "";
private GameResultScreen _resultScreen;
// 转场效果
private bool _isFading = false;
private float _fadeAlpha = 0f;
private float _fadeSpeed = 2f; // 淡出速度
private string _pendingScene = "";
private Texture2D _fadeTexture;
private void Start()
{
// 查找场景中的 GameResultScreen
_resultScreen = FindObjectOfType<GameResultScreen>();
if (_resultScreen == null)
{
Debug.LogWarning("[DebugResultButtons] 场景中没有 GameResultScreen");
}
else
{
Debug.Log("[DebugResultButtons] 找到 GameResultScreen: " + _resultScreen.gameObject.name);
}
// 检查 SceneLoader
if (SceneLoader.Instance == null)
{
Debug.LogWarning("[DebugResultButtons] SceneLoader.Instance 为 null,将使用 SceneManager 直接加载场景");
}
// 创建用于淡入淡出的纹理
_fadeTexture = new Texture2D(1, 1);
_fadeTexture.SetPixel(0, 0, Color.black);
_fadeTexture.Apply();
}
private void Update()
{
// 处理淡出效果
if (_isFading)
{
_fadeAlpha += Time.deltaTime * _fadeSpeed;
if (_fadeAlpha >= 1f)
{
_fadeAlpha = 1f;
// 淡出完成,加载场景
if (!string.IsNullOrEmpty(_pendingScene))
{
Debug.Log($"[DebugResultButtons] 淡出完成,加载场景: {_pendingScene}");
SceneManager.LoadScene(_pendingScene);
}
_isFading = false;
}
}
}
private void OnGUI()
{
// 左上角显示调试信息(大字体,黄色)
GUIStyle debugStyle = new GUIStyle(GUI.skin.label);
debugStyle.fontSize = 18;
debugStyle.normal.textColor = Color.yellow;
debugStyle.fontStyle = FontStyle.Bold;
// 调试信息背景
GUI.Box(new Rect(5, 5, 500, 130), "");
GUI.Label(new Rect(10, 10, 480, 25), $"GameManager.Instance: {(GameManager.Instance != null ? "" : "null - !")}", debugStyle);
GUI.Label(new Rect(10, 35, 480, 25), $"GameState: {GameManager.GameState}", debugStyle);
string resultScreenStatus = _resultScreen != null ? "【已找到】" : "【未找到!】";
GUI.Label(new Rect(10, 60, 480, 25), $"GameResultScreen: {resultScreenStatus}", debugStyle);
if (!string.IsNullOrEmpty(_debugLog))
{
GUIStyle logStyle = new GUIStyle(GUI.skin.label);
logStyle.fontSize = 16;
logStyle.normal.textColor = _debugLog.Contains("错误") ? Color.red : Color.green;
logStyle.fontStyle = FontStyle.Bold;
GUI.Label(new Rect(10, 85, 580, 25), _debugLog, logStyle);
}
// 右上角显示两个按钮(淡出时隐藏)
if (!_isFading)
{
float x = Screen.width - 220;
float y = 10;
GUIStyle style = new GUIStyle(GUI.skin.button);
style.fontSize = 20;
style.fontStyle = FontStyle.Bold;
// 胜利按钮(绿色)
GUI.backgroundColor = new Color(0.2f, 0.8f, 0.2f, 0.9f);
if (GUI.Button(new Rect(x, y, 100, 50), "胜利", style))
{
if (GameManager.Instance == null)
{
_debugLog = "[错误] GameManager.Instance 为 null";
Debug.LogError("[DebugResultButtons] GameManager.Instance 为 null");
}
else
{
_debugLog = $"[调用] Win() - 时间: {Time.time:F2}";
Debug.Log("[DebugResultButtons] 调用 GameManager.Win()");
GameManager.Win();
// 如果没有 ResultScreen,直接跳转结算场景
if (_resultScreen == null)
{
StartFadeToScene("Scoring");
}
}
}
// 失败按钮(红色)
GUI.backgroundColor = new Color(0.8f, 0.2f, 0.2f, 0.9f);
if (GUI.Button(new Rect(x + 110, y, 100, 50), "失败", style))
{
if (GameManager.Instance == null)
{
_debugLog = "[错误] GameManager.Instance 为 null";
Debug.LogError("[DebugResultButtons] GameManager.Instance 为 null");
}
else
{
_debugLog = $"[调用] GameOver() - 时间: {Time.time:F2}";
Debug.Log("[DebugResultButtons] 调用 GameManager.GameOver()");
GameManager.GameOver();
// 如果没有 ResultScreen,直接跳转结算场景
if (_resultScreen == null)
{
StartFadeToScene("Scoring");
}
}
}
// 重置颜色
GUI.backgroundColor = Color.white;
}
// 绘制淡出遮罩
if (_isFading || _fadeAlpha > 0)
{
GUI.color = new Color(0, 0, 0, _fadeAlpha);
GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), _fadeTexture);
GUI.color = Color.white;
}
}
private void StartFadeToScene(string sceneName)
{
_debugLog = $"[转场] 淡出到 {sceneName}...";
_pendingScene = sceneName;
_isFading = true;
_fadeAlpha = 0f;
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: DX5JsnisVSoJmhkFWn78LbJWonDPE0PSo8J+o5RneEP6rGQ1Qh668bA=
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
+145 -51
View File
@@ -5,35 +5,69 @@ using UnityEngine.UI;
namespace GameFramework
{
/// <summary>
/// 排行榜场景 UI 控制器。
/// 如果当前得分能进入 Top-10,先显示输入名字面板;
/// 否则直接显示排行榜。
/// 修复了源项目 ScoringUIController 中 ShowScoringScreen() 被调用两次的 bug。
/// 结算界面 UI 控制器 —— 支持胜利/失败双界面
///
/// 胜利:显示"你做到了" + 魂灵数量 + 新记录标识(如有)
/// 失败:显示"你迷失了" + 去色底图
///
/// 通过 GameManager.GameState 判断胜负。
/// </summary>
public class ScoringUIController : MonoBehaviour
{
[Header("Panels")]
[SerializeField] GameObject leaderboardPanel;
[SerializeField] GameObject newHighScorePanel;
[Header("底图")]
[SerializeField] private Image bgImage;
[SerializeField] private Sprite bgSprite; // bg.png(胜利彩色/失败去色共用同一张)
[Header("Leaderboard")]
[SerializeField] Transform leaderboardContainer; // 包含10个条目的父物体
[SerializeField] Text finalScoreText; // 显示当前局最终得分
[Header("胜利面板")]
[SerializeField] private GameObject winPanel;
[SerializeField] private Image winTitleImage; // "你做到了" 图片
[SerializeField] private Sprite winTitleSprite; // nizuodaol.png
[SerializeField] private Text soulCountText; // 魂灵数量
[SerializeField] private Image soulCountBgImage; // 魂灵数量底图
[SerializeField] private Sprite soulCountBgSprite; // bgpoint.png
[SerializeField] private Image newRecordImage; // "新记录" 图片
[SerializeField] private Sprite newRecordSprite; // 新纪录.png
[SerializeField] private Image scoreLabelImage; // "拯救魂灵" 图片
[SerializeField] private Sprite scoreLabelSprite;
[Header("New High Score")]
[SerializeField] InputField nameInputField;
[SerializeField] Button submitButton;
[SerializeField] Button cancelButton;
[Header("失败面板")]
[SerializeField] private GameObject losePanel;
[SerializeField] private Image loseTitleImage; // "你迷失了" 图片
[SerializeField] private Sprite loseTitleSprite; // nizuodaol.png 副本
[Header("Navigation")]
[SerializeField] Button mainMenuButton;
[Header("排行榜")]
[SerializeField] private GameObject leaderboardPanel;
[SerializeField] private Transform leaderboardContainer;
[SerializeField] private Text finalScoreText;
[Header("新纪录输入")]
[SerializeField] private GameObject newHighScorePanel;
[SerializeField] private InputField nameInputField;
[SerializeField] private Button submitButton;
[SerializeField] private Button cancelButton;
[Header("导航")]
[SerializeField] private Button mainMenuButton;
[SerializeField] private Image mainMenuButtonImage; // 主界面.png
[SerializeField] private Sprite mainMenuBtnSprite;
[Header("装饰")]
[SerializeField] private Image lineImage;
[SerializeField] private Sprite lineSprite;
[SerializeField] private Image bgPointImage;
[SerializeField] private Sprite bgPointSprite;
[Header("Audio")]
[SerializeField] AudioData submitSFX;
[SerializeField] AudioData cancelSFX;
[SerializeField] private AudioData submitSFX;
[SerializeField] private AudioData cancelSFX;
private bool _isWin;
void Start()
{
// 判断胜负
_isWin = (GameManager.GameState == GameState.Victory);
// 绑定按钮
if (submitButton != null)
submitButton.onClick.AddListener(OnSubmitClick);
@@ -43,18 +77,74 @@ namespace GameFramework
mainMenuButton.onClick.AddListener(OnMainMenuClick);
// 初始隐藏所有面板
if (leaderboardPanel != null)
leaderboardPanel.SetActive(false);
if (newHighScorePanel != null)
newHighScorePanel.SetActive(false);
SetPanelActive(winPanel, false);
SetPanelActive(losePanel, false);
SetPanelActive(leaderboardPanel, false);
SetPanelActive(newHighScorePanel, false);
// 显示当前最终得分
if (finalScoreText != null && ScoreManager.Instance != null)
finalScoreText.text = ScoreManager.Instance.CurrentScore.ToString();
// 设置底图(共用同一张,失败时去色)
if (bgImage != null && bgSprite != null)
{
bgImage.sprite = bgSprite;
bgImage.color = _isWin ? Color.white : new Color(0.4f, 0.4f, 0.45f, 1f); // 失败去色
}
// 判断是否进入排行榜
// 只调用一次——修复源项目的双重调用 bug
if (ScoreManager.Instance != null && ScoreManager.Instance.HasNewHighScore)
// 设置装饰图片
if (lineImage != null && lineSprite != null)
lineImage.sprite = lineSprite;
if (bgPointImage != null && bgPointSprite != null)
bgPointImage.sprite = bgPointSprite;
// 设置返回主界面按钮图片
if (mainMenuButtonImage != null && mainMenuBtnSprite != null)
mainMenuButtonImage.sprite = mainMenuBtnSprite;
if (_isWin)
{
ShowWinScreen();
}
else
{
ShowLoseScreen();
}
}
/// <summary>
/// 显示胜利界面。
/// </summary>
void ShowWinScreen()
{
SetPanelActive(winPanel, true);
SetPanelActive(losePanel, false);
// 设置“你做到了”图片
if (winTitleImage != null && winTitleSprite != null)
winTitleImage.sprite = winTitleSprite;
// 设置魂灵数量底图
if (soulCountBgImage != null && soulCountBgSprite != null)
soulCountBgImage.sprite = soulCountBgSprite;
// 显示魂灵数量(复用 ScoreManager
int score = ScoreManager.Instance != null ? ScoreManager.Instance.CurrentScore : 0;
if (soulCountText != null)
soulCountText.text = score.ToString();
// 设置“拯救魂灵”图片
if (scoreLabelImage != null && scoreLabelSprite != null)
scoreLabelImage.sprite = scoreLabelSprite;
// 判断是否新纪录
bool isNewRecord = ScoreManager.Instance != null && ScoreManager.Instance.HasNewHighScore;
if (newRecordImage != null)
{
newRecordImage.gameObject.SetActive(isNewRecord);
if (isNewRecord && newRecordSprite != null)
newRecordImage.sprite = newRecordSprite;
}
// 新纪录时显示输入面板,否则直接显示排行榜
if (isNewRecord)
{
ShowNewHighScorePanel();
}
@@ -64,17 +154,30 @@ namespace GameFramework
}
}
/// <summary>
/// 显示失败界面。
/// </summary>
void ShowLoseScreen()
{
SetPanelActive(winPanel, false);
SetPanelActive(losePanel, true);
// 设置"你迷失了"图片
if (loseTitleImage != null && loseTitleSprite != null)
loseTitleImage.sprite = loseTitleSprite;
// 失败也显示排行榜
ShowLeaderboard();
}
/// <summary>
/// 显示新纪录输入面板。
/// </summary>
void ShowNewHighScorePanel()
{
if (newHighScorePanel != null)
newHighScorePanel.SetActive(true);
if (leaderboardPanel != null)
leaderboardPanel.SetActive(false);
SetPanelActive(newHighScorePanel, true);
SetPanelActive(leaderboardPanel, false);
// 自动选中输入框
if (nameInputField != null)
{
nameInputField.text = "";
@@ -87,37 +190,28 @@ namespace GameFramework
/// </summary>
void ShowLeaderboard()
{
if (newHighScorePanel != null)
newHighScorePanel.SetActive(false);
if (leaderboardPanel != null)
leaderboardPanel.SetActive(true);
SetPanelActive(newHighScorePanel, false);
SetPanelActive(leaderboardPanel, true);
UpdateLeaderboardDisplay();
// 选中主菜单按钮(键盘导航用)
if (mainMenuButton != null)
mainMenuButton.Select();
}
/// <summary>
/// 更新排行榜显示。
/// 遍历 leaderboardContainer 下的子物体,设置排名/得分/名字。
/// 每个条目子物体需要有三个 Text 组件,分别在 Rank/Score/Name 子物体上。
/// </summary>
void UpdateLeaderboardDisplay()
{
if (ScoreManager.Instance == null) return;
if (leaderboardContainer == null) return;
if (ScoreManager.Instance == null || leaderboardContainer == null) return;
var data = ScoreManager.Instance.LoadPlayerScoreData();
int count = Mathf.Min(data.list.Count, leaderboardContainer.childCount);
for (int i = 0; i < leaderboardContainer.childCount; i++)
{
Transform entry = leaderboardContainer.GetChild(i);
bool hasData = i < data.list.Count;
// 查找条目下的三个 Text
Text rankText = FindTextByName(entry, "Rank");
Text scoreText = FindTextByName(entry, "Score");
Text nameText = FindTextByName(entry, "Name");
@@ -140,25 +234,26 @@ namespace GameFramework
}
}
/// <summary>
/// 在子物体中按名称查找 Text 组件。
/// </summary>
Text FindTextByName(Transform parent, string name)
{
Transform t = parent.Find(name);
if (t != null)
return t.GetComponent<Text>();
// 如果条目本身就是单个 Text(没有子结构),返回自身
return parent.GetComponent<Text>();
}
void SetPanelActive(GameObject panel, bool active)
{
if (panel != null)
panel.SetActive(active);
}
#region Button Handlers
void OnSubmitClick()
{
string playerName = "";
if (nameInputField != null)
playerName = nameInputField.text;
if (string.IsNullOrEmpty(playerName))
playerName = "Player";
@@ -173,7 +268,6 @@ namespace GameFramework
void OnCancelClick()
{
// 取消 = 用默认名保存后显示排行榜
if (ScoreManager.Instance != null)
ScoreManager.Instance.SavePlayerScore("Player");
@@ -107,7 +107,7 @@ MonoBehaviour:
radius: 0.8
intensity: 1
registerOnStart: 1
offset: {x: 0, y: 0, z: 0.3}
offset: {x: 0, y: 0, z: 0.4}
followTarget: {fileID: 0}
enableFlicker: 1
flickerSpeed: 0.1
+60 -2
View File
@@ -60,6 +60,19 @@ namespace IndianOceanAssets.Engine2_5D
[Tooltip("巡逻半径")]
[SerializeField] private float bellPatrolRadius = 3f;
[Header("近战攻击")]
[Tooltip("攻击范围(进入此范围后触发攻击)")]
[SerializeField] private float attackRange = 1.5f;
[Tooltip("攻击冷却时间(秒)")]
[SerializeField] private float attackCooldown = 1.5f;
[Tooltip("每次攻击造成的伤害")]
[SerializeField] private int attackDamage = 1;
[Tooltip("攻击动画触发器名称(Animator Trigger")]
[SerializeField] private string attackAnimTrigger = "Attack";
// 状态枚举
private enum State
{
@@ -83,15 +96,29 @@ namespace IndianOceanAssets.Engine2_5D
private float _patrolTimer; // 巡逻计时器
private Vector3 _patrolTarget; // 当前巡逻目标点
// 攻击相关
private float _attackTimer; // 攻击冷却计时器
private Animator _animator; // 敌人动画
private HealthSystem _playerHealth; // 玩家血量引用
private void Start()
{
if (playerTarget == null)
{
var player = GameObject.FindWithTag("Player");
if (player != null)
{
playerTarget = player.transform;
_playerHealth = player.GetComponent<HealthSystem>();
}
}
else
{
_playerHealth = playerTarget.GetComponent<HealthSystem>();
}
_animator = GetComponent<Animator>();
}
private void OnEnable()
{
@@ -129,15 +156,24 @@ namespace IndianOceanAssets.Engine2_5D
// ===== ChasingPlayer:追击玩家 =====
private void UpdateChasingPlayer()
{
// 更新攻击冷却
_attackTimer -= Time.deltaTime;
// 检测是否看到玩家
if (CanSeePlayer())
{
_loseSightTimer = 0f; // 重置计时器
// 追击玩家
float dist = XZDistance(transform.position, playerTarget.position);
if (dist > stopDistance)
// 进入攻击范围 → 近战攻击
if (dist <= attackRange)
{
TryAttack();
}
else if (dist > stopDistance)
{
// 追击玩家
MoveToward(playerTarget.position, chaseSpeed);
}
}
@@ -164,6 +200,28 @@ namespace IndianOceanAssets.Engine2_5D
}
}
/// <summary>
/// 尝试近战攻击。在攻击冷却就绪时触发。
/// </summary>
private void TryAttack()
{
if (_attackTimer > 0f) return; // CD 未就绪
_attackTimer = attackCooldown;
// 对玩家造成伤害
if (_playerHealth != null)
{
_playerHealth.Damage(attackDamage);
}
// 触发攻击动画
if (_animator != null && !string.IsNullOrEmpty(attackAnimTrigger))
{
_animator.SetTrigger(attackAnimTrigger);
}
}
// ===== ChasingBell:追击铃铛 =====
private void UpdateChasingBell()
{
+4 -4
View File
@@ -24,14 +24,14 @@ EditorUserSettings:
value: 0552060207540d5e0c0c5b2743770a4415164f2c782c7563747f4f31e0b5306f
flags: 0
RecentlyUsedSceneGuid-6:
value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a
flags: 0
RecentlyUsedSceneGuid-7:
value: 5300055151055f5a5e0c0f27477708444515192b287124367c791f30b3b9616d
flags: 0
RecentlyUsedSceneGuid-8:
RecentlyUsedSceneGuid-7:
value: 0209025f575750595c57092149765d444e4e49727e7c7068757b1c65b6e36c3b
flags: 0
RecentlyUsedSceneGuid-8:
value: 5a5757560101590a5d0c0e24427b5d44434e4c7a7b7a23677f2b4565b7b5353a
flags: 0
RecentlyUsedSceneGuid-9:
value: 5a55515156575a0b0f56592346260f444f16197c7e7f24697d2a4a32b1b0353e
flags: 0