diff --git a/Assets/KJM/Admob/AdManager.cs b/Assets/KJM/Admob/AdManager.cs
index 71def8d..0a1d754 100644
--- a/Assets/KJM/Admob/AdManager.cs
+++ b/Assets/KJM/Admob/AdManager.cs
@@ -38,14 +38,14 @@ public class AdManager : MonoBehaviour
}
// 보상형 전면 광고 실행
- public void ShowRewardedInterstitialAd()
+ public void ShowRewardedInterstitialAd(CanvasGroup shopPanel)
{
if (rewardedInterstitialAd != null && rewardedInterstitialAd.CanShowAd())
{
rewardedInterstitialAd.Show((Reward reward) => //서버에서 500코인을 고정으로 반환하기 때문에 reward는 사용하지 않음.
{
// 코인 지급 로직
- GrantReward();
+ GrantReward(shopPanel);
});
}
else
@@ -62,12 +62,12 @@ public class AdManager : MonoBehaviour
}
// 코인 지급 함수
- private void GrantReward()
+ private void GrantReward(CanvasGroup shopPanel)
{
NetworkManager.Instance.WatchAdForCoins((coinsAdded) =>
{
// UI 업데이트
- GameManager.Instance.panelManager.UpdateCoinsPanelUI(coinsAdded);
+ GameManager.Instance.panelManager.UpdateCoinsPanelUI(coinsAdded, shopPanel);
}, () =>
{
Debug.Log("광고 시청 후 코인 추가 실패!");
diff --git a/Assets/Resources/Prefabs/Panels/Coins Panel.prefab b/Assets/Resources/Prefabs/Panels/Coins Panel.prefab
index 2e3204c..93b08f8 100644
--- a/Assets/Resources/Prefabs/Panels/Coins Panel.prefab
+++ b/Assets/Resources/Prefabs/Panels/Coins Panel.prefab
@@ -56,6 +56,7 @@ MonoBehaviour:
coinsRemoveAudioClip: {fileID: 8300000, guid: 585a9de0fb7ee4163af5c559ba5b2364, type: 3}
coinsAddAudioClip: {fileID: 8300000, guid: 1ec44182fa76a4b3eb1459c0a6d9a8ab, type: 3}
coinsEmptyAudioClip: {fileID: 8300000, guid: 908a78cb991984977bea42916bed8684, type: 3}
+ ShopPanel: {fileID: 8190964574954487140, guid: eb257b0a685b2254f860f294ce8cba54, type: 3}
--- !u!82 &5499754916380040505
AudioSource:
m_ObjectHideFlags: 0
diff --git a/Assets/Script/Common/CoinsPanelController.cs b/Assets/Script/Common/CoinsPanelController.cs
index ebd013c..34b924c 100644
--- a/Assets/Script/Common/CoinsPanelController.cs
+++ b/Assets/Script/Common/CoinsPanelController.cs
@@ -2,6 +2,7 @@ using System;
using UnityEngine;
using DG.Tweening;
using TMPro;
+using UnityEngine.EventSystems;
using UnityEngine.Serialization;
using UnityEngine.UI;
@@ -14,7 +15,7 @@ public class CoinsPanelController : MonoBehaviour
[SerializeField] private AudioClip coinsRemoveAudioClip;
[SerializeField] private AudioClip coinsAddAudioClip;
[SerializeField] private AudioClip coinsEmptyAudioClip;
-
+
private Color _coinsColor;
private AudioSource _audioSource;
private int _coinsCount;
@@ -93,11 +94,13 @@ public class CoinsPanelController : MonoBehaviour
/// 코인 추가 함수
///
/// 추가할 코인 수량
+ ///
/// 애니메이션 종료 후 동작 EX) 코인 수량 변경
- public void AddCoins(int coinsCount, Action action)
+ public void AddCoins(int coinsCount, CanvasGroup shopPanel,Action action)
{
+ shopPanel.blocksRaycasts = false; //코인 중복 추가 방지 코드
+
Sequence sequence = DOTween.Sequence();
-
// i += a 반복 횟수 조절, 100개 단위로 상승 차감 시 100으로 설정
for (int i = 0; i < coinsCount; i+=500)
{
@@ -115,6 +118,10 @@ public class CoinsPanelController : MonoBehaviour
});
sequence.AppendInterval(0.5f);
}
+ sequence.OnComplete(() =>
+ {
+ shopPanel.blocksRaycasts = true; //구매 후 클릭 활성화
+ });
}
public void EmptyCoins()
diff --git a/Assets/Script/UI/PanelChildController/ShopItemController.cs b/Assets/Script/UI/PanelChildController/ShopItemController.cs
index 87e4403..97f9ad5 100644
--- a/Assets/Script/UI/PanelChildController/ShopItemController.cs
+++ b/Assets/Script/UI/PanelChildController/ShopItemController.cs
@@ -22,20 +22,23 @@ public class ShopItemController : MonoBehaviour
public void OnClickShopItem()
{
+ var shopPanel = GetComponentInParent(); //코인 구매시 상점 패널의 캔버스 그룹 raycast를 비활성화하여 중복클릭 방지.
+
if (_shopItem.Price == 0)
{
//보상형 전면 광고 로드
_adManager = GetComponent();
- _adManager.ShowRewardedInterstitialAd();
+ _adManager.ShowRewardedInterstitialAd(shopPanel);
}
else
{
+
NetworkManager.Instance.PurchaseCoins(
_shopItem.Price, // 충전할 코인 개수
_shopItem.Name, // 결제 ID
"GooglePay", // 결제 방식 (GooglePay, PayPal 등)
(coins) => {
- GameManager.Instance.panelManager.UpdateCoinsPanelUI(coins);
+ GameManager.Instance.panelManager.UpdateCoinsPanelUI(coins,shopPanel);
},
() => {
Debug.LogError("결제 후 코인 충전 실패!");
diff --git a/Assets/Script/UI/PanelController/PanelManager.cs b/Assets/Script/UI/PanelController/PanelManager.cs
index 9c7dc3c..8cb4b74 100644
--- a/Assets/Script/UI/PanelController/PanelManager.cs
+++ b/Assets/Script/UI/PanelController/PanelManager.cs
@@ -202,11 +202,11 @@ public class PanelManager : MonoBehaviour
}
//코인 패널 코인 갱신
- public void UpdateCoinsPanelUI(int coinsChanged)
+ public void UpdateCoinsPanelUI(int coinsChanged, CanvasGroup shopPanel)
{
if (_coinsPanel != null)
{
- _coinsPanel.AddCoins(coinsChanged, () =>
+ _coinsPanel.AddCoins(coinsChanged, shopPanel, () =>
{
});
diff --git a/Assets/Trash Can_JY/CoinUITestScript.cs b/Assets/Trash Can_JY/CoinUITestScript.cs
index 14c72ba..c5dc7b4 100644
--- a/Assets/Trash Can_JY/CoinUITestScript.cs
+++ b/Assets/Trash Can_JY/CoinUITestScript.cs
@@ -8,10 +8,10 @@ public class CoinUITestScript : MonoBehaviour
public void OnClickAddCoin()
{
- coinsPanelController.AddCoins(100, () =>
- {
- Debug.Log("Add coin 후 동작");
- });
+ // coinsPanelController.AddCoins(100, () =>
+ // {
+ // Debug.Log("Add coin 후 동작");
+ // });
}
public void OnClickRemoveCoin()