为什么我的声音脚本会干扰我的广告

时间:2016-05-23 21:27:57

标签: android audio unity3d admob

在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%肯定,但也许切换布尔有一些影响,但我不知道如何。

1 个答案:

答案 0 :(得分:0)

您的代码在问题中未完成,或者您犯了错误,因为在脚本中的任何位置都没有调用GetComponent<AudioSource>().PlayOneShot(Death)。您正在从DeathSound()拨打Death(),但没有任何人正在呼叫Death()来呼叫实际播放声音的DeathSound()。仔细看看你的代码。从某处调用Death()功能,你的声音应该播放。

编辑

第一次没有读好你的问题。

在致电showAd()功能之前,请检查音频是否正在播放,然后停止播放。同时将DeathAudioClip更改为AudioSource。如果可能,请勿在代码中使用static。它会引入很多其他问题。如果要在场景之间共享变量,可以使用PlayerPrefs类而不是使用静态变量来执行此操作。

public void showAd(){

    if (Death.isPlaying)
    {
        Death.Stop();
    }

    if (rewardBasedVideo.IsLoaded()){
        rewardBasedVideo.Show(); 
    }
}