在Unity上使用admob设置奖励广告后,我为Android游戏添加了声音效果。这是我的奖励广告脚本:
string adUnitId = "ca-app-pub-5920324855307233/4458481507";
RewardBasedVideoAd rewardBasedVideo = null;
void Start () {
managerScript = gameObject.GetComponent<GameManager>();
isCalled = false;
rewardBasedVideo = RewardBasedVideoAd.Instance;
}
public void adButton(){
isCalled = true;
AdRequest request = new AdRequest.Builder().Build();
rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
rewardBasedVideo.LoadAd(request, adUnitId);
}
void Update(){
if(isCalled == true){
adButton();
showAd();
}
}
public void showAd(){
if (rewardBasedVideo.IsLoaded()){
rewardBasedVideo.Show();
}
}
public void HandleRewardBasedVideoRewarded(object sender, Reward args){
isCalled = false;
managerScript.revival();
managerScript.Loading.SetActive(false);
rewardBasedVideo.OnAdRewarded -= HandleRewardBasedVideoRewarded;
}
这是我的声音效果脚本(声音脚本):
public AudioClip Death;
public static bool toggled;
public static Sounds Instance;
public void DeathSound(){
if(toggled == true){
GetComponent<AudioSource>().PlayOneShot(Death);
}
}
public void SoundToggle(){
if(toggled == false){
toggled = true;
}else if(toggled == true){
toggled = false;
}
}
最后我如何在另一个脚本中调用声音:
Sounds sound;
GameObject soundManager;
public void Start(){
soundManager = GameObject.Find("Sound Manager");
sound = soundManager.GetComponent<Sounds>();
}
public void Death(){
sound.DeathSound();
}
问题出于某种原因,当声音脚本中的布尔“toggled”为真时,在奖励视频广告结束后不会发生HandleRewardBasedVideoRewarded方法。当没有切换声音时,在广告之后调用该方法并且工作正常。声音效果如何影响广告结束后发生的方法?这个问题困扰着我。有人可以帮忙吗?
更新 我尝试在加载广告之前停用声音,然后在广告之后重新启用它。问题仍然存在。我不是100%肯定,但也许切换布尔有一些影响,但我不知道如何。
答案 0 :(得分:0)
您的代码在问题中未完成,或者您犯了错误,因为在脚本中的任何位置都没有调用GetComponent<AudioSource>().PlayOneShot(Death)
。您正在从DeathSound()
拨打Death()
,但没有任何人正在呼叫Death()
来呼叫实际播放声音的DeathSound()
。仔细看看你的代码。从某处调用Death()
功能,你的声音应该播放。
编辑:
第一次没有读好你的问题。
在致电showAd()
功能之前,请检查音频是否正在播放,然后停止播放。同时将Death
从AudioClip
更改为AudioSource
。如果可能,请勿在代码中使用static
。它会引入很多其他问题。如果要在场景之间共享变量,可以使用PlayerPrefs
类而不是使用静态变量来执行此操作。
public void showAd(){
if (Death.isPlaying)
{
Death.Stop();
}
if (rewardBasedVideo.IsLoaded()){
rewardBasedVideo.Show();
}
}