Do-37 [Fix] 중복 클릭 방지

This commit is contained in:
99jamin 2025-03-20 03:12:01 +09:00
parent 5ba44357e8
commit 2b2d4c1e9f
6 changed files with 26 additions and 15 deletions

View File

@ -38,14 +38,14 @@ public class AdManager : MonoBehaviour
} }
// 보상형 전면 광고 실행 // 보상형 전면 광고 실행
public void ShowRewardedInterstitialAd() public void ShowRewardedInterstitialAd(CanvasGroup shopPanel)
{ {
if (rewardedInterstitialAd != null && rewardedInterstitialAd.CanShowAd()) if (rewardedInterstitialAd != null && rewardedInterstitialAd.CanShowAd())
{ {
rewardedInterstitialAd.Show((Reward reward) => //서버에서 500코인을 고정으로 반환하기 때문에 reward는 사용하지 않음. rewardedInterstitialAd.Show((Reward reward) => //서버에서 500코인을 고정으로 반환하기 때문에 reward는 사용하지 않음.
{ {
// 코인 지급 로직 // 코인 지급 로직
GrantReward(); GrantReward(shopPanel);
}); });
} }
else else
@ -62,12 +62,12 @@ public class AdManager : MonoBehaviour
} }
// 코인 지급 함수 // 코인 지급 함수
private void GrantReward() private void GrantReward(CanvasGroup shopPanel)
{ {
NetworkManager.Instance.WatchAdForCoins((coinsAdded) => NetworkManager.Instance.WatchAdForCoins((coinsAdded) =>
{ {
// UI 업데이트 // UI 업데이트
GameManager.Instance.panelManager.UpdateCoinsPanelUI(coinsAdded); GameManager.Instance.panelManager.UpdateCoinsPanelUI(coinsAdded, shopPanel);
}, () => }, () =>
{ {
Debug.Log("광고 시청 후 코인 추가 실패!"); Debug.Log("광고 시청 후 코인 추가 실패!");

View File

@ -56,6 +56,7 @@ MonoBehaviour:
coinsRemoveAudioClip: {fileID: 8300000, guid: 585a9de0fb7ee4163af5c559ba5b2364, type: 3} coinsRemoveAudioClip: {fileID: 8300000, guid: 585a9de0fb7ee4163af5c559ba5b2364, type: 3}
coinsAddAudioClip: {fileID: 8300000, guid: 1ec44182fa76a4b3eb1459c0a6d9a8ab, type: 3} coinsAddAudioClip: {fileID: 8300000, guid: 1ec44182fa76a4b3eb1459c0a6d9a8ab, type: 3}
coinsEmptyAudioClip: {fileID: 8300000, guid: 908a78cb991984977bea42916bed8684, type: 3} coinsEmptyAudioClip: {fileID: 8300000, guid: 908a78cb991984977bea42916bed8684, type: 3}
ShopPanel: {fileID: 8190964574954487140, guid: eb257b0a685b2254f860f294ce8cba54, type: 3}
--- !u!82 &5499754916380040505 --- !u!82 &5499754916380040505
AudioSource: AudioSource:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -2,6 +2,7 @@ using System;
using UnityEngine; using UnityEngine;
using DG.Tweening; using DG.Tweening;
using TMPro; using TMPro;
using UnityEngine.EventSystems;
using UnityEngine.Serialization; using UnityEngine.Serialization;
using UnityEngine.UI; using UnityEngine.UI;
@ -14,7 +15,7 @@ public class CoinsPanelController : MonoBehaviour
[SerializeField] private AudioClip coinsRemoveAudioClip; [SerializeField] private AudioClip coinsRemoveAudioClip;
[SerializeField] private AudioClip coinsAddAudioClip; [SerializeField] private AudioClip coinsAddAudioClip;
[SerializeField] private AudioClip coinsEmptyAudioClip; [SerializeField] private AudioClip coinsEmptyAudioClip;
private Color _coinsColor; private Color _coinsColor;
private AudioSource _audioSource; private AudioSource _audioSource;
private int _coinsCount; private int _coinsCount;
@ -93,11 +94,13 @@ public class CoinsPanelController : MonoBehaviour
/// 코인 추가 함수 /// 코인 추가 함수
/// </summary> /// </summary>
/// <param name="coinsCount"> 추가할 코인 수량</param> /// <param name="coinsCount"> 추가할 코인 수량</param>
/// <param name="shopPanel"></param>
/// <param name="action">애니메이션 종료 후 동작 EX) 코인 수량 변경</param> /// <param name="action">애니메이션 종료 후 동작 EX) 코인 수량 변경</param>
public void AddCoins(int coinsCount, Action action) public void AddCoins(int coinsCount, CanvasGroup shopPanel,Action action)
{ {
shopPanel.blocksRaycasts = false; //코인 중복 추가 방지 코드
Sequence sequence = DOTween.Sequence(); Sequence sequence = DOTween.Sequence();
// i += a 반복 횟수 조절, 100개 단위로 상승 차감 시 100으로 설정 // i += a 반복 횟수 조절, 100개 단위로 상승 차감 시 100으로 설정
for (int i = 0; i < coinsCount; i+=500) for (int i = 0; i < coinsCount; i+=500)
{ {
@ -115,6 +118,10 @@ public class CoinsPanelController : MonoBehaviour
}); });
sequence.AppendInterval(0.5f); sequence.AppendInterval(0.5f);
} }
sequence.OnComplete(() =>
{
shopPanel.blocksRaycasts = true; //구매 후 클릭 활성화
});
} }
public void EmptyCoins() public void EmptyCoins()

View File

@ -22,20 +22,23 @@ public class ShopItemController : MonoBehaviour
public void OnClickShopItem() public void OnClickShopItem()
{ {
var shopPanel = GetComponentInParent<CanvasGroup>(); //코인 구매시 상점 패널의 캔버스 그룹 raycast를 비활성화하여 중복클릭 방지.
if (_shopItem.Price == 0) if (_shopItem.Price == 0)
{ {
//보상형 전면 광고 로드 //보상형 전면 광고 로드
_adManager = GetComponent<AdManager>(); _adManager = GetComponent<AdManager>();
_adManager.ShowRewardedInterstitialAd(); _adManager.ShowRewardedInterstitialAd(shopPanel);
} }
else else
{ {
NetworkManager.Instance.PurchaseCoins( NetworkManager.Instance.PurchaseCoins(
_shopItem.Price, // 충전할 코인 개수 _shopItem.Price, // 충전할 코인 개수
_shopItem.Name, // 결제 ID _shopItem.Name, // 결제 ID
"GooglePay", // 결제 방식 (GooglePay, PayPal 등) "GooglePay", // 결제 방식 (GooglePay, PayPal 등)
(coins) => { (coins) => {
GameManager.Instance.panelManager.UpdateCoinsPanelUI(coins); GameManager.Instance.panelManager.UpdateCoinsPanelUI(coins,shopPanel);
}, },
() => { () => {
Debug.LogError("결제 후 코인 충전 실패!"); Debug.LogError("결제 후 코인 충전 실패!");

View File

@ -202,11 +202,11 @@ public class PanelManager : MonoBehaviour
} }
//코인 패널 코인 갱신 //코인 패널 코인 갱신
public void UpdateCoinsPanelUI(int coinsChanged) public void UpdateCoinsPanelUI(int coinsChanged, CanvasGroup shopPanel)
{ {
if (_coinsPanel != null) if (_coinsPanel != null)
{ {
_coinsPanel.AddCoins(coinsChanged, () => _coinsPanel.AddCoins(coinsChanged, shopPanel, () =>
{ {
}); });

View File

@ -8,10 +8,10 @@ public class CoinUITestScript : MonoBehaviour
public void OnClickAddCoin() public void OnClickAddCoin()
{ {
coinsPanelController.AddCoins(100, () => // coinsPanelController.AddCoins(100, () =>
{ // {
Debug.Log("Add coin 후 동작"); // Debug.Log("Add coin 후 동작");
}); // });
} }
public void OnClickRemoveCoin() public void OnClickRemoveCoin()