【问题标题】:Unity method only runs first line of codeunity 方法只运行第一行代码
【发布时间】:2020-12-30 18:38:54
【问题描述】:

我已在我的项目中全面运行 AdMob 测试广告。 当观看广告时,下面的代码应该运行,但是只有第一行被执行,其他 2 行被忽略,没有错误。

public void HandleUserEarnedReward(object sender, Reward args)
{
    GameControl.control.life += 1;
    GameControl.control.Save();
    txtLife.text = GameControl.control.life.ToString();
}

我在另一个方法中放置了相同的代码,我用一个按钮触发来进行测试。 在这种情况下,完整的方法会运行。

public void runtest()
{      
    GameControl.control.life += 1;
    GameControl.control.Save();
    txtLife.text = GameControl.control.life.ToString();
}

【问题讨论】:

  • 代码看起来不错。您如何得出结论,只有第一行正在执行。它运行并且什么都不保存?您尝试单步执行 (F10) 并跳过了行?
  • 如果您只在构建游戏中遇到这种情况 - 您可以尝试添加 Debug.Log 以从日志中读取信息是否正在执行每一行。
  • 我尝试了各种方法,例如将代码行打印到控制台,重复第一行代码。该方法总是跳过除第一行之外的所有内容。这发生在统一编辑器和我的 Android 设备上的构建中。当我调试步骤时(F10)对我来说是灰色的,所以无法点击查看是否有任何问题。

标签: c# visual-studio unity3d methods admob


【解决方案1】:

如果我没记错的话,您是在用户观看奖励视频后尝试给予奖励。我曾经遇到过同样的问题,问题是在“HandleUserEarnedReward”内部执行的函数不会在统一的 MainThread 上执行,而是在 Google 的 SDK 线程上执行。 有几种解决方案:

  1. https://github.com/PimDeWitte/UnityMainThreadDispatcher - 使用这个切换到主线程。查看自述文件以了解更多信息。

  2. 创建具有 false 值的全局布尔值。然后在“HandleUserEarnedReward”上将“isRewarded”布尔值更改为 true。创建更新函数来检查布尔值。比如:

     void Update()
    {
         if (isRewarded)
         {
             // do all the actions
             // reward the player
    
             isRewarded = false; // to make sure this action will happen only once.
         }
    }
    
  1. 使用协程。协程在“yield return”后自动切换到 Unity 的 MainThread

     public void HandleRewardBasedVideoRewarded(object sender, Reward args)
     {
     string type = args.Type;
     double amount = args.Amount;
     Debug.Log(
         "HandleRewardBasedVideoRewarded event received for "
         + amount.ToString() + " " + type);
    
       StartCoroutine(AfunctionName());
    
     }
    
    
     IEnumerator AfunctionName()
     {
      yield return new WaitForSecondsRealtime(0.1f);
    
      // FB.LogAppEvent("AdmobRewardedView");
         Debug.Log("Reward Function Called!!!!!");
         GiveReward();
    
         this.RequestRewardBasedVideo();
     }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2016-06-24
    相关资源
    最近更新 更多