用unity制作游戏(在游戏中集成Unity广告)
用unity制作游戏(在游戏中集成Unity广告)为你的游戏设计动人的广告注:在Unity编辑器中Unity只会展示一张蓝色静态的图片来作为模拟。在真实设备上的测试模式下,就会得到一个Unity视频测试广告。你可以尝试跳过或完整的观看。当为了发布禁用测试时,来自Unity广告商们的直播视频就会显示了。接通观看视频广告按钮在脚本编辑器中打开Lander.cs,并将一下代码添加到Start()下边:这会接通Watch a standard video ad按钮来展示标准的Unity视频广告。在编辑器试一下,感受一下出现的模拟视频广告的惊奇吧!
原始工程下载:
https://koenig-media.raywenderlich.com/uploads/2016/07/IntegratingAds_Starter.zip
完整工程下载:
https://koenig-media.raywenderlich.com/uploads/2016/07/IntegratingAds_Finished.zip
接通观看视频广告按钮
在脚本编辑器中打开Lander.cs,并将一下代码添加到Start()下边:
|
这会接通Watch a standard video ad按钮来展示标准的Unity视频广告。在编辑器试一下,感受一下出现的模拟视频广告的惊奇吧!
注:在Unity编辑器中Unity只会展示一张蓝色静态的图片来作为模拟。在真实设备上的测试模式下,就会得到一个Unity视频测试广告。你可以尝试跳过或完整的观看。当为了发布禁用测试时,来自Unity广告商们的直播视频就会显示了。
为你的游戏设计动人的广告
为游戏设计好的广告体验的关键依赖于怎样整合Unity广告。首先,广告应该引诱并奖励玩家。其次,广告应尽力让人们来玩儿你的游戏。当玩家死后,或者在关卡开始/结束时展示广告是没有意义的。这对玩家来说是无聊乏味的。这可能会导致他们直接删掉游戏。
广告应该融入到你为玩家精心设计的游戏体验当中。一个简单的例子就是为玩家提供游戏内可消费的物品来作为观看广告的奖励。另一个例子就是作为失败后额外的机会(像是提供一个关卡恢复)。应该在游戏设置中的休息点或一些自然间隙时在UI中提供这些奖励,或者由游戏中角色的对话序列中提供。记住强迫玩家看广告几乎可以肯定会导致卸载游戏——视频通常要做成可选择的。
注:你只会想关心设计奖励视频广告。这些每耗费千个展览量或者转化率会产生更高的效益。通过允许玩家选择性加入这种类型的视频会从玩家创造更高的参与度。
强迫玩家看没有奖励的广告只会让玩家卸载游戏
用奖励广告来奖励并引诱玩家
现在已经可以在游戏中展示一个标准的视频广告了,但是并没有什么奖励。给你的玩家提供看了没有奖励的广告并不会给任何人留着印象!没有人是为了好玩儿而去看广告。是时候把它变成给玩家一个看视频广告的鼓励了。
游戏现在给玩家8单位的燃料来指引他们的着陆器停在降落场。太多的操作会耗费燃料,玩家就会在降落的过程中耗尽燃料。一个简单的鼓励观看视频广告的方法就是当撞毁后为下一次着陆给玩家提供更多的燃料。在脚本编辑器中打开AdManager.cs并添加下边的方法:
12 | public void ShowRewardedFuelVideoAd() { ShowVideoAd(FuelRewardCallBack "rewardedVideo" ); } |
这是一个返回为空的公开方法,当把方法附加给按钮时会用到。
进入一个自定义回调方法来完成对玩家的奖励。将zone ID设置为“rewardedVideo”。这告诉Unity广告这个视频广告是一个奖励广告。
把下边的方法添加到AdManager.cs:
0102030405060708091011121314151617181920212223 | private void FuelRewardCallBack(ShowResult showResult) { var fuelBtn = GameObject.Find( "MoreFuelRewardAdBtn" ).GetComponent<Button>(); switch (showResult) { case ShowResult.Finished: Debug.Log( "Player finished watching the video ad and is being rewarded with extra fuel." ); GameManager.instance.extraFuel = 10f; fuelBtn.transform.GetChild(0).GetComponent<Text>().text = "Fuel added (10 extra)" ; fuelBtn.enabled = false ; break ; case ShowResult.Skipped: Debug.Log( "Player skipped watching the video ad no reward." ); fuelBtn.GetComponent<Button>(); fuelBtn.transform.GetChild(0).GetComponent<Text>().text = "No fuel added - you skipped the ad" ; fuelBtn.enabled = false ; break ; case ShowResult.Failed: Debug.Log( "video ad failed no reward." ); break ; } } |
代码从UI面板的按钮中获取一个引用。这样按钮的状态和文本就可以依据视频广告的结果来设置。
一个开关状态处理不同的动作。这样,动作就依据是否完整的观看了视频广告,被跳过,或者是未通过。完整观看的情况下,额外的燃料会被添加到GameManager 实例中。当玩家开始新一轮游戏时,额外的燃料就被添加到了玩家的燃料供给当中。
打开Lander.cs并且将下边的代码添加到Start()下边,在另一个之前为观看标准视频广告按钮添加的AddListener调用之后。
fuelRewardBtn.onClick.AddListener(AdManager.instance.ShowRewardedFuelVideoAd); |
当玩家点击获取燃料奖励按钮时会在AdManager里调用ShowRewardedFuelVideoAd() 。
保存代码,回到Unity中试一下结果。
到处飞一下,或者完成着陆,或者在一些地方撞毁。就可以使用燃料奖励按钮了。由于是在编辑器中,会出现测试广告。如果看一下控制台,则会看到消息“Player finished watching the video ad and is being rewarded withextra fuel”。
如果在真实的IOS或设备上测试,就会看到真正的视频广告播放。同样的代码可以判断是否完整的观看了广告,还是跳过了。如果跳过了,或者因为一些原因广告未通过,就不会有可添加的燃料奖励,代码中 ShowResult.Skipped开关状态部分就会替代ShowResult.Finished而执行。
如果在设备上运行游戏,这就是测试广告体验将会看到的:
为广告的可用性安排时间
你可以进一步扩展体验,并且添加一个定时延迟来获取奖励条目。这个可以用来确保玩家不会频繁的获得奖励。这还可以确保他们不会需要太多的视频广告。Unity的广告服务在一个用户每24小时观看广告的最大数量上有一些限制。
注:用户被默认限制为每天(24小时循环)每个应用25条广告。用户还被限制为同一个广告每小时只能看到一次。
定时延迟广告可以确保玩家在达到每日限制时不会出现“未通过视频”广告。这会阻止玩家在游戏中当他们想获取奖励时看到奇怪的表现。
接通定时延迟礼物奖励按钮
打开AdManager.cs 并添加下边的方法:
12 | public bool IsAdWithZoneIdReady( string zoneId) { return Advertisement.IsReady(zoneId); } |
基于传到方法中的zoneId 字符串来检查广告是否准备好了。
打开PresentAdReward.cs 并添加以下方法:
123456 | private bool IsReady() { if (Time.time > remainingCooldown) { return AdManager.instance.IsAdWithZoneIdReady(zoneId); } return false ; } |
这个方法调用AdManager的 IsAdWithZoneIdReady()来检查视频广告是否准备好了。只有当计时器超出剩下的冷却时间才会发生。
然后,添加下边的方法来显示视频。
12 | private void OpenReward() { AdManager.instance.ShowVideoAd(PresentRewardCallback zoneId); } |
这个方法接通UI中的 Present Reward 按钮。当用户点击按钮观看视频时,PresentRewardCallback 将会传递结果。
现在为回调添加代码:
0102030405060708091011121314151617 | private void PresentRewardCallback(ShowResult result) { switch (result) { case ShowResult.Finished: Debug.Log( "Player finished watching the video ad and is being rewarded with extra fuel." ); GameManager.instance.extraFuel = rewardAmount; if (coolDown > 0f) { remainingCooldown = Time.time coolDown; } break ; case ShowResult.Skipped: Debug.Log( "Player skipped watching the video ad no reward." ); break ; case ShowResult.Failed: Debug.Log( "video ad failed no reward." ); break ; } } |
如果视频广告播放至结束,就会有一些燃料奖励给玩家来完成接下来的关卡。这个可以通过设置PresentAdReward 脚本里的rewardAmount 浮点数值来决定。有一个检测来确保冷却值大于零。如果是,那么剩下的冷却被设置为当前运行的游戏时间加冷却值。这样的结果是获得奖励的倒计时器会回到30秒计时,因此玩家在可以再次使用奖励之前需要等30秒时间。
跳过和未通过的情况会在控制台显示日志信息。如果玩家跳过视频广告或者广告没有通过播放他们就不会获得奖励。为了追踪奖励冷却的运行时间,在PresentAdReward.cs中将下边代码添加到Update()方法。
01020304050607080910 | if (button) { button.interactable = IsReady(); if (button.interactable) { cooldownText.text = "Reward ready! Touch to watch video and open" ; } else { cooldownText.text = "Next reward in: " ( int )(remainingCooldown - Time.time) " seconds" ; } } |
按钮的interactable 属性基于视频广告是否真正准备好播放而设置为true 或者false 。
如果按钮的interactable为真,按钮下边的文本就会设置为“Rewardready!”,否则,当前剩余时间要的等待奖励展示。最后,通过将下边的代码添加到PresentAdReward.cs脚本的Start()下边来将OpenPresent() 挂载到按钮上:
button.onClick.AddListener(OpenReward); |
构建并运行游戏,撞击石头来观察游戏结束界面。就会看到一个可以点击的闪闪的奖励礼物按钮。
点击礼物图标观看视频广告。然后获取20奖励的燃料大礼包!关闭广告后,会注意到奖励在30内不可用,取而代之显示的是倒计时器。
(未完待续~~~)