Added AdsScripts

Tahir-branch
Hazim Bin Ijaz 3 weeks ago
parent ce8820e802
commit 0f798993bc

@ -9,7 +9,7 @@ MonoBehaviour:
m_GameObject: {fileID: 0} m_GameObject: {fileID: 0}
m_Enabled: 1 m_Enabled: 1
m_EditorHideFlags: 0 m_EditorHideFlags: 0
m_Script: {fileID: 0} m_Script: {fileID: 11500000, guid: 7b340139c9e4d054f904d8b452798652, type: 3}
m_Name: ES3Defaults m_Name: ES3Defaults
m_EditorClassIdentifier: m_EditorClassIdentifier:
settings: settings:

@ -14,8 +14,26 @@ PluginImporter:
isPreloaded: 0 isPreloaded: 0
isOverridable: 0 isOverridable: 0
isExplicitlyReferenced: 0 isExplicitlyReferenced: 0
validateReferences: 1 validateReferences: 0
platformData: platformData:
- first:
: Any
second:
enabled: 0
settings:
Exclude Android: 1
Exclude Editor: 0
Exclude Linux64: 1
Exclude OSXUniversal: 1
Exclude Win: 1
Exclude Win64: 1
- first:
Android: Android
second:
enabled: 0
settings:
AndroidSharedLibraryType: Executable
CPU: ARMv7
- first: - first:
Any: Any:
second: second:
@ -26,7 +44,33 @@ PluginImporter:
second: second:
enabled: 1 enabled: 1
settings: settings:
CPU: AnyCPU
DefaultValueInitialized: true DefaultValueInitialized: true
OS: AnyOS
- first:
Standalone: Linux64
second:
enabled: 0
settings:
CPU: x86_64
- first:
Standalone: OSXUniversal
second:
enabled: 0
settings:
CPU: None
- first:
Standalone: Win
second:
enabled: 0
settings:
CPU: x86
- first:
Standalone: Win64
second:
enabled: 0
settings:
CPU: x86_64
- first: - first:
Windows Store Apps: WindowsStoreApps Windows Store Apps: WindowsStoreApps
second: second:

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3faf72e5fd4b5594885be40431ca3fe0
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,71 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class AdmobUIHandler : MonoBehaviour
{
public Text admobInitText, admobInitTextBool;
public Text iAdLoadingTextBool, rAdLoadingTextBool;
public Text iAdLoadedTextBool, rAdLoadedTextBool;
private void Start()
{
AdsManager.Instance.OnAdmobInitializedEvent += OnAdmobInitComplete;
AdsManager.Instance.OniAdLoading += OniAdStartedLoading;
AdsManager.Instance.OnrAdLoading += OnrAdStartedLoading;
AdsManager.Instance.OniAdLoaded += OniAdLoaded;
AdsManager.Instance.OnrAdLoaded += OnrAdLoaded;
}
private void OnAdmobInitComplete()
{
admobInitText.text = "Admob Initialized";
admobInitTextBool.text = "true";
}
private void OniAdStartedLoading(bool val)
{
iAdLoadingTextBool.text = val.ToString();
}
private void OniAdLoaded(bool val)
{
iAdLoadedTextBool.text = val.ToString();
}
private void OnrAdStartedLoading(bool val)
{
rAdLoadingTextBool.text = val.ToString();
}
private void OnrAdLoaded(bool val)
{
rAdLoadedTextBool.text = val.ToString();
}
public void InitAdmob()
{
AdsManager.Instance.InitializeAdmob();
}
public void RequestrAd()
{
AdsManager.Instance.LoadRewardedAdWithDelay();
}
public void RequestiAd()
{
AdsManager.Instance.LoadInterstitialAdWithDelay();
}
public void ShowiAd()
{
AdsManager.Instance.ShowInterstitialAd("placement_name");
}
public void ShowrAd()
{
AdsManager.Instance.ShowRewardedAd(RewardedTypes.Color);
}
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: dce9aed54179cfb4792ca72bdd213712
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 100
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

@ -0,0 +1,381 @@
using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AdsManager : MonoBehaviour
{
//test ad units
#if UNITY_ANDROID
public string iAdUnit = "ca-app-pub-3940256099942544/1033173712";
#elif UNITY_IPHONE
public string iAdUnit = "ca-app-pub-3940256099942544/4411468910";
#endif
// test ad units
#if UNITY_ANDROID
public string rAdUnit = "ca-app-pub-3940256099942544/5224354917";
#elif UNITY_IPHONE
public string rAdUnit = "ca-app-pub-3940256099942544/1712485313";
#endif
private InterstitialAd _interstitialAd;
private int interstitialRetryAttempt = 1;
private bool loadingiAd = false;
private string iAdPlacement;
private RewardedAd _rewardedAd;
private int rewardedRetryAttempt = 1;
private bool loadingrAd = false;
private RewardedTypes rewardType;
private bool isRewardAvailable = false;
public static AdsManager Instance;
public Action<RewardedTypes> OnUserEarnedReward;
public Action OnAdmobInitializedEvent;
public Action<bool> OniAdLoading;
public Action<bool> OnrAdLoading;
public Action<bool> OniAdLoaded;
public Action<bool> OnrAdLoaded;
private void Awake()
{
if (Instance is null)
Instance = this;
else
DestroyImmediate(this);
DontDestroyOnLoad(gameObject);
}
private void Start()
{
InitializeAdmob();
}
private void FixedUpdate()
{
if (isRewardAvailable)
{
isRewardAvailable = false;
OnUserEarnedReward?.Invoke(rewardType);
}
}
public void InitializeAdmob()
{
if (!CanShowAds()) return;
MobileAds.RaiseAdEventsOnUnityMainThread = true;
// Initialize the Google Mobile Ads SDK.
MobileAds.Initialize(OnAdmobInitialized);
}
public void OnAdmobInitialized(InitializationStatus initStatus)
{
MobileAdsEventExecutor.ExecuteInUpdate(() =>
{
Debug.Log("Admob Initialized");
OnAdmobInitializedEvent?.Invoke();
Invoke(nameof(LoadInterstitialAdWithDelay), 3f);
Invoke(nameof(LoadRewardedAdWithDelay), 6f);
});
}
public bool CanShowAds()
{
return true;
}
private void OnAdPaid(AdValue adValue)
{
Debug.Log(String.Format("ad paid {0} {1}.",
adValue.Value,
adValue.CurrencyCode));
}
private void PauseGame()
{
Time.timeScale = 0f;
AudioListener.pause = true;
}
private void ResumeGame()
{
Time.timeScale = 1f;
AudioListener.pause = false;
}
#region Interstitial_Ads
public void LoadInterstitialAdWithDelay()
{
if (!CanShowAds()) return;
var currentAttempt = Mathf.Min(interstitialRetryAttempt, 5);
var delayTime = Mathf.Pow(2, currentAttempt);
if(!loadingiAd)
{
OniAdLoading?.Invoke(loadingiAd);
loadingiAd = true;
Invoke(nameof(LoadInterstitialAd), delayTime);
}
}
private void LoadInterstitialAd()
{
// Clean up the old ad before loading a new one.
if (_interstitialAd != null)
{
_interstitialAd.Destroy();
_interstitialAd = null;
}
// create our request used to load the ad.
var adRequest = new AdRequest();
// send the request to load the ad.
InterstitialAd.Load(iAdUnit, adRequest, OnInterstitialAdLoaded);
}
private void OnInterstitialAdLoaded(InterstitialAd ad, LoadAdError error)
{
MobileAdsEventExecutor.ExecuteInUpdate(() =>
{
loadingiAd = false;
OniAdLoading?.Invoke(loadingiAd);
// if error is not null, the load request failed.
if (error != null || ad == null)
{
OniAdLoaded?.Invoke(false);
interstitialRetryAttempt++;
//load ad again
LoadInterstitialAdWithDelay();
Debug.LogError("interstitial ad failed to load an ad " +
"with error : " + error);
return;
}
interstitialRetryAttempt = 1;
Debug.Log("Interstitial ad loaded with response : "
+ ad.GetResponseInfo());
OniAdLoaded?.Invoke(true);
_interstitialAd = ad;
RegisterEventHandlers(_interstitialAd);
});
}
public void ShowInterstitialAd(string adPlacement)
{
if (!CanShowAds()) return;
iAdPlacement = adPlacement;
if (_interstitialAd != null && _interstitialAd.CanShowAd())
{
Debug.Log("Showing interstitial ad.");
_interstitialAd.Show();
}
else
{
Debug.LogError("Interstitial ad is not ready yet.");
LoadInterstitialAdWithDelay();
}
}
private void RegisterEventHandlers(InterstitialAd interstitialAd)
{
// Raised when the ad is estimated to have earned money.
//interstitialAd.OnAdPaid += OnAdPaid;
// Raised when an impression is recorded for an ad.
//interstitialAd.OnAdImpressionRecorded += () =>
//{
// Debug.Log("Interstitial ad recorded an impression.");
//};
// Raised when a click is recorded for an ad.
//interstitialAd.OnAdClicked += () =>
//{
// Debug.Log("Interstitial ad was clicked.");
//};
//Raised when an ad opened full screen content.
interstitialAd.OnAdFullScreenContentOpened += OnInterstitialAdOpen;
// Raised when the ad closed full screen content.
interstitialAd.OnAdFullScreenContentClosed += () =>
{
MobileAdsEventExecutor.ExecuteInUpdate(() =>
{
Debug.Log("Interstitial ad full screen content closed.");
ResumeGame();
LoadInterstitialAdWithDelay();
});
};
// Raised when the ad failed to open full screen content.
interstitialAd.OnAdFullScreenContentFailed += (AdError error) =>
{
MobileAdsEventExecutor.ExecuteInUpdate(() =>
{
Debug.LogError("Interstitial ad failed to open full screen content " +
"with error : " + error);
LoadInterstitialAdWithDelay();
});
};
}
private void OnInterstitialAdOpen()
{
MobileAdsEventExecutor.ExecuteInUpdate(() =>
{
PauseGame();
});
}
#endregion
#region Rewarded_Ads
public void LoadRewardedAdWithDelay()
{
if (!CanShowAds()) return;
var currentAttempt = Mathf.Min(rewardedRetryAttempt, 5);
var delayTime = Mathf.Pow(2, currentAttempt);
if (!loadingrAd)
{
OnrAdLoading?.Invoke(loadingrAd);
loadingrAd = true;
Invoke(nameof(LoadRewardedAd), delayTime);
}
}
public void LoadRewardedAd()
{
// Clean up the old ad before loading a new one.
if (_rewardedAd != null)
{
_rewardedAd.Destroy();
_rewardedAd = null;
}
Debug.Log("Loading the rewarded ad.");
// create our request used to load the ad.
var adRequest = new AdRequest();
// send the request to load the ad.
RewardedAd.Load(rAdUnit, adRequest, OnRewardedAdLoaded);
}
private void OnRewardedAdLoaded(RewardedAd ad, LoadAdError error)
{
MobileAdsEventExecutor.ExecuteInUpdate(() =>
{
loadingrAd = false;
OnrAdLoading?.Invoke(loadingrAd);
// if error is not null, the load request failed.
if (error != null || ad == null)
{
OnrAdLoaded?.Invoke(false);
rewardedRetryAttempt++;
//load ad again
LoadRewardedAdWithDelay();
Debug.LogError("rewarded ad failed to load an ad " +
"with error : " + error);
return;
}
rewardedRetryAttempt = 1;
Debug.Log("rewarded ad loaded with response : "
+ ad.GetResponseInfo());
OnrAdLoaded?.Invoke(true);
_rewardedAd = ad;
RegisterEventHandlers(_rewardedAd);
});
}
private void RegisterEventHandlers(RewardedAd ad)
{
// Raised when the ad is estimated to have earned money.
//ad.OnAdPaid += OnAdPaid;
// Raised when an impression is recorded for an ad.
//ad.OnAdImpressionRecorded += () =>
//{
// Debug.Log("Rewarded ad recorded an impression.");
//};
// Raised when a click is recorded for an ad.
//ad.OnAdClicked += () =>
//{
// Debug.Log("Rewarded ad was clicked.");
//};
// Raised when an ad opened full screen content.
ad.OnAdFullScreenContentOpened += OnRewardedAdOpen;
// Raised when the ad closed full screen content.
ad.OnAdFullScreenContentClosed += () =>
{
MobileAdsEventExecutor.ExecuteInUpdate(() =>
{
Debug.Log("Rewarded ad full screen content closed.");
ResumeGame();
LoadRewardedAdWithDelay();
});
};
// Raised when the ad failed to open full screen content.
ad.OnAdFullScreenContentFailed += (AdError error) =>
{
MobileAdsEventExecutor.ExecuteInUpdate(() =>
{
Debug.LogError("Rewarded ad failed to open full screen content " +
"with error : " + error);
LoadRewardedAdWithDelay();
});
};
}
private void OnRewardedAdOpen()
{
MobileAdsEventExecutor.ExecuteInUpdate(() =>
{
PauseGame();
});
}
public void ShowRewardedAd(RewardedTypes rewardFor)
{
rewardType = rewardFor;
if (!CanShowAds())
{
isRewardAvailable = true;
return;
}
if (_rewardedAd != null && _rewardedAd.CanShowAd())
{
_rewardedAd.Show((Reward reward) =>
{
// TODO: Reward the user.
isRewardAvailable = true;
});
}
else
{
Debug.LogError("No Video!");
LoadRewardedAdWithDelay();
}
}
#endregion
}
public enum RewardedTypes
{
None,
Revive,
ClaimDouble,
LevelUnlock,
FootSteps,
NewCharacter,
Color,
Animation,
InventoryPurchase,
Hint
}

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: a853c83bcccfa14468a366e0290483a3
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 50
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
Loading…
Cancel
Save