feat: 愿望单按钮

This commit is contained in:
2026-08-02 17:55:26 +08:00
parent e8aea1e83d
commit be4e820aa5
13 changed files with 3873 additions and 149 deletions
@@ -0,0 +1,276 @@
fileFormatVersion: 2
guid: e93fefacb613c7949bd980f442308be8
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 12
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
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 0
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 80
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: 512
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 2048
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
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: iPhone
maxTextureSize: 2048
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
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
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:
- serializedVersion: 2
name: "\u613F\u671B\u5355\u5E95\u56FE"
rect:
serializedVersion: 2
x: 18
y: 98
width: 221
height: 67
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 9126fd4e9e6cac34ab5df470d537f5c9
internalID: -446940781
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: steam
rect:
serializedVersion: 2
x: 17
y: 24
width: 54
height: 53
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: ee5cc13d42915be429d454233e52024f
internalID: -1306802213
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: discord
rect:
serializedVersion: 2
x: 94
y: 22
width: 61
height: 57
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: b6e90577fb57de24ca3a143c25eed67d
internalID: -2006352162
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: qq
rect:
serializedVersion: 2
x: 174
y: 23
width: 61
height: 57
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 6adc60fa22a3b504bbb0b5250ae6348f
internalID: -2059125989
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: survey
rect:
serializedVersion: 2
x: 252
y: 26
width: 47
height: 50
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 964392a000dd1a747a40e34d841bfff8
internalID: 745043766
vertices: []
indices:
edges: []
weights: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable:
discord: -2006352162
qq: -2059125989
steam: -1306802213
survey: 745043766
"\u613F\u671B\u5355\u5E95\u56FE": -446940781
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
Binary file not shown.
@@ -0,0 +1,276 @@
fileFormatVersion: 2
guid: 539db7533ab287b45a774b3c5e2ccd9d
TextureImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 12
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
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: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 43
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: 1024
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 0
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 3
buildTarget: WebGL
maxTextureSize: 2048
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
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: iPhone
maxTextureSize: 2048
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
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
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:
- serializedVersion: 2
name: steam
rect:
serializedVersion: 2
x: 0
y: 256
width: 256
height: 256
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 41578b441e0af2e4fb7e2089976a7723
internalID: 39534463
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: qq
rect:
serializedVersion: 2
x: 256
y: 256
width: 256
height: 256
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 447f8622f6cb6af4db7de37663091170
internalID: -833030708
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: survey
rect:
serializedVersion: 2
x: 512
y: 256
width: 256
height: 256
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 997f6fba89d26384a99e73be3b724d10
internalID: -2053764108
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: mail
rect:
serializedVersion: 2
x: 0
y: 0
width: 256
height: 256
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: a01d56968a0e6c749919fffa10dfed83
internalID: 1669415166
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: discord
rect:
serializedVersion: 2
x: 256
y: 0
width: 256
height: 256
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 74bda8e14ed9ae74c930e3c2baf6065d
internalID: -954596088
vertices: []
indices:
edges: []
weights: []
outline: []
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
nameFileIdTable:
discord: -954596088
mail: 1669415166
qq: -833030708
steam: 39534463
survey: -2053764108
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 38d583e57ec06cf46bd48fdbd359300e
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
File diff suppressed because it is too large Load Diff
+2
View File
@@ -17,6 +17,8 @@ namespace AibisDream.Utility
public const string SurveyURL_EN = "https://jsj.top/f/y501LX"; public const string SurveyURL_EN = "https://jsj.top/f/y501LX";
public const string SurveyURL_JP = "https://jsj.top/f/icnVug"; public const string SurveyURL_JP = "https://jsj.top/f/icnVug";
public const string SupportEmail = "support@tinbird.games";
public const string WishlistURL = "https://store.steampowered.com/app/3473430/_All_Our_Broken_Parts?utm_source=playtest"; public const string WishlistURL = "https://store.steampowered.com/app/3473430/_All_Our_Broken_Parts?utm_source=playtest";
public const string SteamWishlistURL = "steam://store/3473430"; public const string SteamWishlistURL = "steam://store/3473430";
@@ -18,6 +18,12 @@ namespace AibisDream
#region #region
[YarnCommand("OpenEndMenu")]
public static void OpenEndMenu()
{
UIManager.Instance.ShowPanel<EndPanel>();
}
[YarnCommand("NextYarn")] [YarnCommand("NextYarn")]
public static void NextYarn(string exitName = null) public static void NextYarn(string exitName = null)
{ {
@@ -30,12 +36,6 @@ namespace AibisDream
YarnVariableStorage.Instance.ClearLocal(); YarnVariableStorage.Instance.ClearLocal();
} }
[YarnCommand("OpenEndMenu")]
public static void OpenEndMenu()
{
UIManager.Instance.ShowPanel<EndPanel>();
}
[YarnCommand("load_scene")] [YarnCommand("load_scene")]
public static IEnumerator LoadScene(string sceneName, float _unusedFadeDuration = 0f) public static IEnumerator LoadScene(string sceneName, float _unusedFadeDuration = 0f)
{ {
+34 -28
View File
@@ -1,55 +1,61 @@
using UnityEngine; using AibisDream.Utility;
using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
namespace AibisDream.UI namespace AibisDream.UI
{ {
public class EndPanel : MonoBehaviour, IUIPanel public class EndPanel : MonoBehaviour, IUIPanel
{ {
[SerializeField] private Button surveyButton;
[SerializeField] private Button wishlistButton;
[SerializeField] private Button communityButton;
[SerializeField] private Button contactButton;
public bool IsOpen => gameObject.activeSelf; public bool IsOpen => gameObject.activeSelf;
public bool IsCloseable => false; public bool IsCloseable => false;
#region private void Awake()
{
RegisterButtons();
}
private void OnDestroy()
{
UnregisterButtons();
}
public void Show() public void Show()
{ {
gameObject.SetActive(true); gameObject.SetActive(true);
RegisterButton();
} }
public void Hide() public void Hide()
{ {
gameObject.SetActive(false); gameObject.SetActive(false);
UnRegisterButton();
} }
#endregion private void RegisterButtons()
private void RegisterButton()
{ {
var returnBtn = transform.Find("返回").GetComponent<Button>(); if (surveyButton != null)
returnBtn.onClick.AddListener(BackToMain); surveyButton.onClick.AddListener(PlaytestLinkUtility.OpenSurvey);
if (wishlistButton != null)
wishlistButton.onClick.AddListener(PlaytestLinkUtility.OpenWishlist);
if (communityButton != null)
communityButton.onClick.AddListener(PlaytestLinkUtility.OpenCommunity);
if (contactButton != null)
contactButton.onClick.AddListener(PlaytestLinkUtility.OpenContact);
} }
private void UnRegisterButton() private void UnregisterButtons()
{ {
var returnBtn = transform.Find("返回").GetComponent<Button>(); if (surveyButton != null)
returnBtn.onClick.RemoveAllListeners(); surveyButton.onClick.RemoveListener(PlaytestLinkUtility.OpenSurvey);
if (wishlistButton != null)
wishlistButton.onClick.RemoveListener(PlaytestLinkUtility.OpenWishlist);
if (communityButton != null)
communityButton.onClick.RemoveListener(PlaytestLinkUtility.OpenCommunity);
if (contactButton != null)
contactButton.onClick.RemoveListener(PlaytestLinkUtility.OpenContact);
} }
private void BackToMain()
{
UIManager.Instance.HidePanel<EndPanel>();
GameManager.Instance.TryReturnToMainMenu();
}
// private void OpenFeedbackLink()
// {
// Application.OpenURL(ConstRef.SurveyURL);
// }
// private void OpenBugLink()
// {
// Application.OpenURL(ConstRef.BugSurveyURL);
// }
} }
} }
@@ -1,8 +1,10 @@
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using AibisDream.Utility;
using UnityEngine; using UnityEngine;
using UnityEngine.Playables; using UnityEngine.Playables;
using UnityEngine.UI;
namespace AibisDream.UI namespace AibisDream.UI
{ {
@@ -35,6 +37,9 @@ namespace AibisDream.UI
[SerializeField] private PlayableDirector introDirector; [SerializeField] private PlayableDirector introDirector;
[SerializeField] private float postIntroPause = 0.5f; [SerializeField] private float postIntroPause = 0.5f;
[SerializeField] private GameObject menuFrame; [SerializeField] private GameObject menuFrame;
[SerializeField] private Button surveyButton;
[SerializeField] private Button wishlistButton;
[SerializeField] private Button communityButton;
private readonly Stack<TerminalPage> _backStack = new(); private readonly Stack<TerminalPage> _backStack = new();
private TerminalPage _currentPage = TerminalPage.None; private TerminalPage _currentPage = TerminalPage.None;
@@ -48,6 +53,16 @@ namespace AibisDream.UI
public TerminalPage CurrentPage => _currentPage; public TerminalPage CurrentPage => _currentPage;
public bool IsInGameContext => false; public bool IsInGameContext => false;
private void Awake()
{
RegisterLinkButtons();
}
private void OnDestroy()
{
UnregisterLinkButtons();
}
public void Initialize() public void Initialize()
{ {
startPage?.SetOwner(this); startPage?.SetOwner(this);
@@ -62,6 +77,26 @@ namespace AibisDream.UI
Close(); Close();
} }
private void RegisterLinkButtons()
{
if (surveyButton != null)
surveyButton.onClick.AddListener(PlaytestLinkUtility.OpenSurvey);
if (wishlistButton != null)
wishlistButton.onClick.AddListener(PlaytestLinkUtility.OpenWishlist);
if (communityButton != null)
communityButton.onClick.AddListener(PlaytestLinkUtility.OpenCommunity);
}
private void UnregisterLinkButtons()
{
if (surveyButton != null)
surveyButton.onClick.RemoveListener(PlaytestLinkUtility.OpenSurvey);
if (wishlistButton != null)
wishlistButton.onClick.RemoveListener(PlaytestLinkUtility.OpenWishlist);
if (communityButton != null)
communityButton.onClick.RemoveListener(PlaytestLinkUtility.OpenCommunity);
}
public bool HasRequiredPages() public bool HasRequiredPages()
{ {
return startPage != null && settingPage != null && chapterPage != null; return startPage != null && settingPage != null && chapterPage != null;
@@ -0,0 +1,40 @@
using AibisDream.Framework;
using UnityEngine;
namespace AibisDream.Utility
{
/// <summary>
/// Playtest 外链入口:问卷 / 愿望单 / 社群 / 联系邮箱。
/// </summary>
public static class PlaytestLinkUtility
{
public static void OpenSurvey()
{
var url = LocalizationKit.CurrentLocaleKind switch
{
LocaleKind.Cn => ConstRef.SurveyURL_CN,
LocaleKind.Ja => ConstRef.SurveyURL_JP,
_ => ConstRef.SurveyURL_EN
};
Application.OpenURL(url);
}
public static void OpenWishlist()
{
SteamStoreUtility.OpenWishlistPage();
}
public static void OpenCommunity()
{
var url = LocalizationKit.CurrentLocaleKind == LocaleKind.Cn
? ConstRef.QQURL
: ConstRef.DiscordURL;
Application.OpenURL(url);
}
public static void OpenContact()
{
Application.OpenURL($"mailto:{ConstRef.SupportEmail}");
}
}
}
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b6c993eb6086e8d478c4d6b290bfcce8
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: