添加TapTap登录
This commit is contained in:
3
Assets/Scripts/UI/LoginPage.meta
Normal file
3
Assets/Scripts/UI/LoginPage.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0a7898e788484c3ea6a73702bc75bfcc
|
||||
timeCreated: 1781501969
|
||||
176
Assets/Scripts/UI/LoginPage/LoginPage.cs
Normal file
176
Assets/Scripts/UI/LoginPage/LoginPage.cs
Normal file
@@ -0,0 +1,176 @@
|
||||
using System;
|
||||
using IchniOnline.Online.Logic;
|
||||
using TapSDK.Login;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace Ichni.UI
|
||||
{
|
||||
public class LoginPage : UIPageBase
|
||||
{
|
||||
[Header("Button References")]
|
||||
public Button closeButton;
|
||||
public Button tapTapButton;
|
||||
|
||||
[Header("Page References")]
|
||||
public StartUIPage startUIPage;
|
||||
|
||||
private bool _isLoggingIn;
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
|
||||
// 如果 mainCanvasGroup 没有在 Inspector 中赋值,递归查找子物体
|
||||
if (mainCanvasGroup == null)
|
||||
{
|
||||
mainCanvasGroup = GetComponentInChildren<CanvasGroup>(true);
|
||||
}
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
// 确保初始状态:alpha=0, 不可交互, 不可射线检测
|
||||
// (Canvas 处于 inactive 状态,这些值在激活后生效)
|
||||
if (mainCanvasGroup != null)
|
||||
{
|
||||
mainCanvasGroup.alpha = 0f;
|
||||
mainCanvasGroup.interactable = false;
|
||||
mainCanvasGroup.blocksRaycasts = false;
|
||||
}
|
||||
|
||||
// 在 Start 中绑定按钮事件(确保序列化引用已就绪)
|
||||
if (closeButton != null)
|
||||
{
|
||||
closeButton.onClick.AddListener(OnCloseClicked);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning("[LoginPage] closeButton 未赋值");
|
||||
}
|
||||
|
||||
if (tapTapButton != null)
|
||||
{
|
||||
tapTapButton.onClick.AddListener(OnTapTapClicked);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning("[LoginPage] tapTapButton 未赋值");
|
||||
}
|
||||
|
||||
// 在 Start 中订阅事件(确保 ThirdPartyServiceManager.Instance 已初始化)
|
||||
SubscribeThirdPartyEvents();
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
UnsubscribeThirdPartyEvents();
|
||||
}
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
// 每次启用时重新订阅(处理 DontDestroyOnLoad 场景切换等情况)
|
||||
SubscribeThirdPartyEvents();
|
||||
}
|
||||
|
||||
private void OnDisable()
|
||||
{
|
||||
UnsubscribeThirdPartyEvents();
|
||||
}
|
||||
|
||||
#region ThirdPartyServiceManager Event Subscription
|
||||
|
||||
private void SubscribeThirdPartyEvents()
|
||||
{
|
||||
if (ThirdPartyServiceManager.Instance == null) return;
|
||||
ThirdPartyServiceManager.Instance.OnLoginSuccess -= OnTapTapLoginSuccess;
|
||||
ThirdPartyServiceManager.Instance.OnLoginCanceled -= OnTapTapLoginCanceled;
|
||||
ThirdPartyServiceManager.Instance.OnLoginFailed -= OnTapTapLoginFailed;
|
||||
|
||||
ThirdPartyServiceManager.Instance.OnLoginSuccess += OnTapTapLoginSuccess;
|
||||
ThirdPartyServiceManager.Instance.OnLoginCanceled += OnTapTapLoginCanceled;
|
||||
ThirdPartyServiceManager.Instance.OnLoginFailed += OnTapTapLoginFailed;
|
||||
}
|
||||
|
||||
private void UnsubscribeThirdPartyEvents()
|
||||
{
|
||||
if (ThirdPartyServiceManager.Instance == null) return;
|
||||
ThirdPartyServiceManager.Instance.OnLoginSuccess -= OnTapTapLoginSuccess;
|
||||
ThirdPartyServiceManager.Instance.OnLoginCanceled -= OnTapTapLoginCanceled;
|
||||
ThirdPartyServiceManager.Instance.OnLoginFailed -= OnTapTapLoginFailed;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// 点击 Close 按钮:淡出登录页,恢复 StartPage 交互
|
||||
/// </summary>
|
||||
private void OnCloseClicked()
|
||||
{
|
||||
FadeOut(0.5f, false, RestoreStartPage);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 点击 TapTap 按钮:发起 TapTap 登录
|
||||
/// </summary>
|
||||
private void OnTapTapClicked()
|
||||
{
|
||||
if (_isLoggingIn) return;
|
||||
|
||||
_isLoggingIn = true;
|
||||
tapTapButton.interactable = false;
|
||||
if (closeButton != null) closeButton.interactable = false;
|
||||
|
||||
ThirdPartyServiceManager.Instance?.StartTapTapLogin();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// TapTap 登录成功回调
|
||||
/// </summary>
|
||||
private void OnTapTapLoginSuccess(TapTapAccount account)
|
||||
{
|
||||
_isLoggingIn = false;
|
||||
Debug.Log($"[LoginPage] TapTap 登录成功,用户:{account.name}");
|
||||
|
||||
// 登录成功后淡出登录页
|
||||
FadeOut(0.5f, false, RestoreStartPage);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// TapTap 登录取消回调
|
||||
/// </summary>
|
||||
private void OnTapTapLoginCanceled()
|
||||
{
|
||||
_isLoggingIn = false;
|
||||
RestoreButtons();
|
||||
Debug.Log("[LoginPage] 用户取消了 TapTap 登录");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// TapTap 登录失败回调
|
||||
/// </summary>
|
||||
private void OnTapTapLoginFailed(string error)
|
||||
{
|
||||
_isLoggingIn = false;
|
||||
RestoreButtons();
|
||||
Debug.LogError($"[LoginPage] TapTap 登录失败:{error}");
|
||||
}
|
||||
|
||||
private void RestoreButtons()
|
||||
{
|
||||
if (tapTapButton != null) tapTapButton.interactable = true;
|
||||
if (closeButton != null) closeButton.interactable = true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 恢复 StartPage 的交互能力
|
||||
/// </summary>
|
||||
private void RestoreStartPage()
|
||||
{
|
||||
if (startUIPage != null)
|
||||
{
|
||||
startUIPage.RestoreInteraction();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
3
Assets/Scripts/UI/LoginPage/LoginPage.cs.meta
Normal file
3
Assets/Scripts/UI/LoginPage/LoginPage.cs.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 653bdc256f8f4a17b6ecd4997a5f92e1
|
||||
timeCreated: 1781501982
|
||||
@@ -2,6 +2,7 @@ using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using DG.Tweening;
|
||||
using IchniOnline.Online.Logic;
|
||||
using SLSUtilities.WwiseAssistance;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Serialization;
|
||||
@@ -15,6 +16,10 @@ namespace Ichni.UI
|
||||
|
||||
public GameObject peWarningWindow;
|
||||
public GameObject contentWindow;
|
||||
|
||||
[Header("Login")]
|
||||
public LoginPage loginPage;
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
@@ -37,12 +42,33 @@ namespace Ichni.UI
|
||||
public void TouchToStart()
|
||||
{
|
||||
AudioManager.Post(AK.EVENTS.TOUCHTOSTART);
|
||||
|
||||
FadeOut();
|
||||
|
||||
floatingParticles.GetComponent<Renderer>().material.DOColor(Color.clear, "_BaseColor", 0.5f).Play();
|
||||
|
||||
ChapterSelectionManager.instance.chapterSelectionUIPage.FadeIn();
|
||||
// 已有登录缓存 → 跳过 LoginPage,直接进入章节选择
|
||||
if (LoginCacheManager.HasCachedLogin)
|
||||
{
|
||||
FadeOut();
|
||||
floatingParticles.GetComponent<Renderer>().material.DOColor(Color.clear, "_BaseColor", 0.5f).Play();
|
||||
ChapterSelectionManager.instance.chapterSelectionUIPage.FadeIn();
|
||||
return;
|
||||
}
|
||||
|
||||
// 未登录 → 禁用 StartPage 交互,显示 LoginPage 覆盖层
|
||||
mainCanvasGroup.interactable = false;
|
||||
mainCanvasGroup.blocksRaycasts = false;
|
||||
|
||||
if (loginPage != null)
|
||||
{
|
||||
loginPage.FadeIn();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// LoginPage 关闭后调用,恢复 StartPage 的交互
|
||||
/// </summary>
|
||||
public void RestoreInteraction()
|
||||
{
|
||||
mainCanvasGroup.interactable = true;
|
||||
mainCanvasGroup.blocksRaycasts = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user