c# - Unity 广告的 resultCallback 仅在视频完成时奖励

标签 c# video unity-game-engine ads

我最近在一个正在运行的游戏中添加了统一广告,我想弄清楚如何使用奖励视频广告位置来确保我只在不跳过视频时提供奖励。 我已经有了统一广告,这是我的代码:

private static bool PlayUnityVideoAd()
{
    string adString = PlayerPrefs.GetString ("UnityAds"+adName);
    if (Advertisement.isReady (adString)) {
        Advertisement.Show (adString, new ShowOptions {
            pause = true,
            resultCallback = result => {
                Debug.Log (result.ToString ())
            }
        });
        return true;
    }
    return false;
}

如果 ShowOptions.resultCallback 设置为 Finished,我需要更改什么才能使函数仅返回 true? 我尝试将 Debug.Log 行替换为从开关返回值的行,但它使统一崩溃了。 我也有一种感觉,可能需要 Advertisement.isShowing 来确保等待视频结束,但我不知道如何实现它。 所以,我想要的结果是:
完成 => 返回 true;
失败 => 返回 false;
跳过 => 返回 false;

注释:
我使用 PlayerPrefs 存储不同广告展示位置的 ID (adString)。
这是多个广告网络级联的一部分,这就是为什么我希望它返回 true 或 false。

最佳答案

实际上,您的答案是错误的,因为 resultBool 变量将异步更新,如果广告可用,“return resultBool”语句在您的情况下将始终返回 true,而不是播放器完成视频。

一个好的实现是使用回调、您在某处创建的静态,甚至是您在参数中给出的动态事件。

它会是这样的:

private static void PlayUnityVideoAd(Callback<bool> onVideoPlayed)
{
    string adString = PlayerPrefs.GetString ("UnityAds" + adName);
    if (Advertisement.isReady (adString)) {
     Advertisement.Show (adString, new ShowOptions {
            pause = true,
            resultCallback = result => {
                switch(result)
                {
                case (ShowResult.Finished):
                    onVideoPlayed(true);
                    break;
                case (ShowResult.Failed):
                    onVideoPlayed(false);
                    break;
                case(ShowResult.Skipped):
                    onVideoPlayed(false);
                    break;
                }
            }
        });
    }
    onVideoPlayed(false);
}

请记住,您可能需要更新代码工作流程才能保持原始行为并异步工作。因此,不要做这样的事情:

void MyCodeWorkflow()
{
   //Doing somehing...
   bool result = PlayUnityVideoAd();
   if (result)
   {
     //Something
   }
   else
   {
     //Something else
   }
}

这将是:

public delegate void Callback<T>(T value);

void MyCodeWorkflow()
{
   //Doing somehing...
   PlayUnityVideoAd(delegate(bool result)
   {
     if (result)
     {
       //Something
     }
     else
     {
       //Something else
     }
   });
}

关于c# - Unity 广告的 resultCallback 仅在视频完成时奖励,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29137373/

相关文章:

ios - 由于 AdMob,Mac 上的 Unity 游戏构建失败

c# - 桌面应用程序中的 Application Insights 不会发送性能计数器

c# - 使用 LINQ 访问存储过程值。 Entity Framework 5,数据库优先

c# - 如何查看一次垃圾回收的内容?

javascript - 如何使用 javascript 命令在 jw player 中获取源 url

windows - 命名应用程序 explorer.exe 时 FPS 低

c# - 如何从控制台读取用户输入?

android - 如何在 Android 中使用 Camera2 API 录制视频时以编程方式拍摄照片

jquery - 当访问者来自特定站点时自动播放YouTube视频吗?

c# - 在Unity3d中连接MySql -> NullReferenceException : Object reference not set to an instance of an object