From e0b73803a7fa1be1e88b0712761e9dd5cbc401c9 Mon Sep 17 00:00:00 2001 From: 99jamin <99jamin56@gmail.com> Date: Mon, 17 Mar 2025 16:58:31 +0900 Subject: [PATCH] =?UTF-8?q?Do-37=20[Feat]=20=EB=B3=B4=EC=83=81=ED=98=95=20?= =?UTF-8?q?=EC=A0=84=EB=A9=B4=20=EA=B4=91=EA=B3=A0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 상점 패널의 첫 번째 요소를 광고 보상으로 설정하고, 클릭할 시 테스트 광고 실행 후 보상 함수 실행. --- Assets/GoogleMobileAds/Resources.meta | 8 +++ .../Resources/GoogleMobileAdsSettings.asset | 22 ++++++ .../GoogleMobileAdsSettings.asset.meta | 8 +++ Assets/KJM/Admob.meta | 8 +++ Assets/KJM/Admob/AdManager.cs | 72 +++++++++++++++++++ Assets/KJM/Admob/AdManager.cs.meta | 11 +++ Assets/KJM/Admob/Admob.prefab | 46 ++++++++++++ Assets/KJM/Admob/Admob.prefab.meta | 7 ++ .../ScrollItem/ShopScrollItem.prefab | 1 + Assets/KJM/KimJaeMin.unity | 58 +++++++++++++++ .../ShopItemController.cs | 8 +++ .../UI/PanelController/TestPanelController.cs | 30 +++++--- 12 files changed, 271 insertions(+), 8 deletions(-) create mode 100644 Assets/GoogleMobileAds/Resources.meta create mode 100644 Assets/GoogleMobileAds/Resources/GoogleMobileAdsSettings.asset create mode 100644 Assets/GoogleMobileAds/Resources/GoogleMobileAdsSettings.asset.meta create mode 100644 Assets/KJM/Admob.meta create mode 100644 Assets/KJM/Admob/AdManager.cs create mode 100644 Assets/KJM/Admob/AdManager.cs.meta create mode 100644 Assets/KJM/Admob/Admob.prefab create mode 100644 Assets/KJM/Admob/Admob.prefab.meta diff --git a/Assets/GoogleMobileAds/Resources.meta b/Assets/GoogleMobileAds/Resources.meta new file mode 100644 index 0000000..7390f1d --- /dev/null +++ b/Assets/GoogleMobileAds/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f7ccc4a40ba9ce54eb682c4507bd9941 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/GoogleMobileAds/Resources/GoogleMobileAdsSettings.asset b/Assets/GoogleMobileAds/Resources/GoogleMobileAdsSettings.asset new file mode 100644 index 0000000..c79c95c --- /dev/null +++ b/Assets/GoogleMobileAds/Resources/GoogleMobileAdsSettings.asset @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a187246822bbb47529482707f3e0eff8, type: 3} + m_Name: GoogleMobileAdsSettings + m_EditorClassIdentifier: + adMobAndroidAppId: ca-app-pub-3940256099942544~3347511713 + adMobIOSAppId: ca-app-pub-3940256099942544~1458002511 + enableKotlinXCoroutinesPackagingOption: 1 + optimizeInitialization: 0 + optimizeAdLoading: 0 + userTrackingUsageDescription: + validateGradleDependencies: 0 + userLanguage: en diff --git a/Assets/GoogleMobileAds/Resources/GoogleMobileAdsSettings.asset.meta b/Assets/GoogleMobileAds/Resources/GoogleMobileAdsSettings.asset.meta new file mode 100644 index 0000000..d440f61 --- /dev/null +++ b/Assets/GoogleMobileAds/Resources/GoogleMobileAdsSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f422e23084618ef4d88e27833b97e5f6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/KJM/Admob.meta b/Assets/KJM/Admob.meta new file mode 100644 index 0000000..2d80dc7 --- /dev/null +++ b/Assets/KJM/Admob.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 83ca459a697bf9c4d8d5050e5f7655e9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/KJM/Admob/AdManager.cs b/Assets/KJM/Admob/AdManager.cs new file mode 100644 index 0000000..cd50811 --- /dev/null +++ b/Assets/KJM/Admob/AdManager.cs @@ -0,0 +1,72 @@ +using UnityEngine; +using GoogleMobileAds.Api; +using System; + +public class AdManager : MonoBehaviour +{ + private RewardedInterstitialAd rewardedInterstitialAd; + private string adUnitId = "ca-app-pub-3940256099942544/5354046379"; // 테스트 광고 ID + + void Start() + { + // Google Mobile Ads 초기화 + MobileAds.Initialize(initStatus => { Debug.Log("AdMob Initialized"); }); + + // 광고 로드 + LoadRewardedInterstitialAd(); + } + + // 보상형 전면 광고 로드 + public void LoadRewardedInterstitialAd() + { + AdRequest request = new AdRequest(); + + RewardedInterstitialAd.Load(adUnitId, request, + (RewardedInterstitialAd ad, LoadAdError error) => + { + if (error != null) + { + Debug.LogError("보상형 전면 광고 로드 실패: " + error); + return; + } + + Debug.Log("보상형 전면 광고 로드 성공"); + rewardedInterstitialAd = ad; + + // 광고 종료 이벤트 설정 + rewardedInterstitialAd.OnAdFullScreenContentClosed += HandleAdClosed; + }); + } + + // 보상형 전면 광고 실행 + public void ShowRewardedInterstitialAd() + { + if (rewardedInterstitialAd != null && rewardedInterstitialAd.CanShowAd()) + { + rewardedInterstitialAd.Show((Reward reward) => + { + Debug.Log("코인 지급됨: " + reward.Amount); + // 코인 지급 로직 + GrantReward(); + }); + } + else + { + Debug.Log("보상형 전면 광고가 아직 로드되지 않았습니다."); + } + } + + // 광고 닫힘 이벤트 처리 + private void HandleAdClosed() + { + Debug.Log("보상형 전면 광고 닫힘, 새로운 광고 로드."); + LoadRewardedInterstitialAd(); // 광고가 닫힌 후 다시 로드 + } + + // 코인 지급 함수 + private void GrantReward() + { + Debug.Log("코인 지금 완료"); + // 코인 보상 로직 추가 + } +} \ No newline at end of file diff --git a/Assets/KJM/Admob/AdManager.cs.meta b/Assets/KJM/Admob/AdManager.cs.meta new file mode 100644 index 0000000..b33fbd2 --- /dev/null +++ b/Assets/KJM/Admob/AdManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 644acbaf5d5791242b26c1b1b0a0ceeb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/KJM/Admob/Admob.prefab b/Assets/KJM/Admob/Admob.prefab new file mode 100644 index 0000000..19990cc --- /dev/null +++ b/Assets/KJM/Admob/Admob.prefab @@ -0,0 +1,46 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8786799901643631561 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7455536569977767830} + - component: {fileID: 2424336103342601865} + m_Layer: 0 + m_Name: Admob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &7455536569977767830 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8786799901643631561} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2424336103342601865 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8786799901643631561} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 644acbaf5d5791242b26c1b1b0a0ceeb, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/KJM/Admob/Admob.prefab.meta b/Assets/KJM/Admob/Admob.prefab.meta new file mode 100644 index 0000000..57160ff --- /dev/null +++ b/Assets/KJM/Admob/Admob.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c401513426cb83c4e8759c73d8be4c3a +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/KJM/KJMprefabs/ScrollItem/ShopScrollItem.prefab b/Assets/KJM/KJMprefabs/ScrollItem/ShopScrollItem.prefab index 95132c3..4768b74 100644 --- a/Assets/KJM/KJMprefabs/ScrollItem/ShopScrollItem.prefab +++ b/Assets/KJM/KJMprefabs/ScrollItem/ShopScrollItem.prefab @@ -491,5 +491,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 4d28917ad20c19e428cbf98ba5609e69, type: 3} m_Name: m_EditorClassIdentifier: + adManager: {fileID: 8786799901643631561, guid: c401513426cb83c4e8759c73d8be4c3a, type: 3} profileSprites: - {fileID: 21300000, guid: 307bff9630735f342852f28b1cd5d300, type: 3} diff --git a/Assets/KJM/KimJaeMin.unity b/Assets/KJM/KimJaeMin.unity index fa10f57..3eb83e9 100644 --- a/Assets/KJM/KimJaeMin.unity +++ b/Assets/KJM/KimJaeMin.unity @@ -347,6 +347,63 @@ MonoBehaviour: m_DefaultSpriteDPI: 96 m_DynamicPixelsPerUnit: 1 m_PresetInfoIsWorld: 0 +--- !u!1001 &523594383261405864 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 7455536569977767830, guid: c401513426cb83c4e8759c73d8be4c3a, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7455536569977767830, guid: c401513426cb83c4e8759c73d8be4c3a, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7455536569977767830, guid: c401513426cb83c4e8759c73d8be4c3a, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7455536569977767830, guid: c401513426cb83c4e8759c73d8be4c3a, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7455536569977767830, guid: c401513426cb83c4e8759c73d8be4c3a, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7455536569977767830, guid: c401513426cb83c4e8759c73d8be4c3a, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7455536569977767830, guid: c401513426cb83c4e8759c73d8be4c3a, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7455536569977767830, guid: c401513426cb83c4e8759c73d8be4c3a, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7455536569977767830, guid: c401513426cb83c4e8759c73d8be4c3a, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7455536569977767830, guid: c401513426cb83c4e8759c73d8be4c3a, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8786799901643631561, guid: c401513426cb83c4e8759c73d8be4c3a, type: 3} + propertyPath: m_Name + value: Admob + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c401513426cb83c4e8759c73d8be4c3a, type: 3} --- !u!1 &658145525140724706 GameObject: m_ObjectHideFlags: 0 @@ -1690,3 +1747,4 @@ SceneRoots: - {fileID: 656468223} - {fileID: 937655098394579964} - {fileID: 1842188762} + - {fileID: 523594383261405864} diff --git a/Assets/Script/UI/PanelChildController/ShopItemController.cs b/Assets/Script/UI/PanelChildController/ShopItemController.cs index dd02af1..f928182 100644 --- a/Assets/Script/UI/PanelChildController/ShopItemController.cs +++ b/Assets/Script/UI/PanelChildController/ShopItemController.cs @@ -6,6 +6,7 @@ using UnityEngine.UI; public class ShopItemController : MonoBehaviour { + ShopItem _shopItem; public Sprite[] profileSprites; @@ -23,5 +24,12 @@ public class ShopItemController : MonoBehaviour public void OnClickShopItem() { Debug.Log(_shopItem.Name + "의 가격은" + _shopItem.Price); + + if (_shopItem.Price == "광고") //첫번째 항목이 광고일 때를 가정하고 작성 + { + Debug.Log("첫번쨰"); + //보상형 전면 광고 로드 + FindObjectOfType().ShowRewardedInterstitialAd(); //FindOf 함수는 추후 수정 + } } } diff --git a/Assets/Script/UI/PanelController/TestPanelController.cs b/Assets/Script/UI/PanelController/TestPanelController.cs index d2299f4..2dc352f 100644 --- a/Assets/Script/UI/PanelController/TestPanelController.cs +++ b/Assets/Script/UI/PanelController/TestPanelController.cs @@ -106,20 +106,34 @@ public class TestPanelController : MonoBehaviour { List shopItems = new List(); //테스트 데이터 리스트 생성 - for (int i = 0; i < 30; i++) + for (int i = 0; i < 10; i++) { - ShopItem shopItem = new ShopItem + if (i == 0) //광고 항목 { - ItemSpriteIndex = Random.Range(0, 1), - Name = "코인"+i+"개", - Price = (i * 1000)+ "원" - }; - shopItems.Add(shopItem); + ShopItem shopItem = new ShopItem + { + ItemSpriteIndex = Random.Range(0, 1), + Name = "코인10개", + Price = "광고" + }; + shopItems.Add(shopItem); + } + else + { + ShopItem shopItem = new ShopItem + { + ItemSpriteIndex = Random.Range(0, 1), + Name = "코인"+i+"개", + Price = (i * 1000)+ "원" + }; + shopItems.Add(shopItem); + } } - + OpenShopPanel(shopItems); } + //기보 패널 생성 public void OnGiboPanelClick() {