c# - unity 方法只运行第一行代码
问题描述
我已经在我的项目中完全运行 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();
}
解决方案
如果我没记错的话,您是在用户观看奖励视频后尝试给予奖励。我曾经遇到过同样的问题,问题是在“HandleUserEarnedReward”内部执行的函数不会在统一的 MainThread 上执行,而是在 Google 的 SDK 线程上执行。有几种解决方案:
https://github.com/PimDeWitte/UnityMainThreadDispatcher - 使用这个切换到主线程。查看自述文件以获取更多信息。
创建具有 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. } }
使用协程。协程在“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(); }
推荐阅读
- python - 如何在我的拼字游戏中计算整个单词的分数?
- wordpress - htaccess 通过 IP 限制 wordpress 登录不起作用
- database - Derby XPLAIN 程序不可用
- leaflet - 在传单中跟踪像素坐标
- node.js - 我试图弄清楚为什么“纱线启动”命令由于错误而无法完成(据我所知,有端口的东西)
- arrays - `sorted()` 在 python3 中出现 `SyntaxError`
- excel - SSIS 动态 Excel 目标文件名作为表名
- excel - 编辑 Excel 列中的文本
- apache-spark - 无法在 pyspark 中推断 CSV 的架构
- html - Excel 导出到重叠的 HTML 单元格