UDN
Search public documentation:

InGameAdsCH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 主页 > 平台接口架构 > 游戏中的广告
UE3主页 > 移动设备主页 >游戏中的广告

游戏中的广告

概述


游戏内的广告使得免费地或者以非常便宜的价格发行游戏并仍然维持获得潜在的收入成为可能。这使得诱导别人下载您的游戏变得更加容易,增加了用户基础。通过使用Apple的iAd广告网络可以将游戏中的广告添加到针对iOS平台的游戏中。添加游戏内广告是非常简单的,仅需要几行代码。

ALERT! 重点: 如果你的游戏是免费的,那么从游戏内广告所获得收入算作使用UDK获得的收入。如果您使用游戏广告,那么在发布游戏之前必须购买UDK授权。

注意: 仅当游戏在iOS设备上运行时显示广告。移动设备预览器上将不显示广告。

广告管理器


一个特殊的类 InGameAdManager ,它通过iAd网络来负责管理和显示游戏内的广告。这个类处理所有同获得、显示游戏广告及和游戏广告进行交互相关所有功能。

属性

  • bShouldPauseWhileAdOpen - 如果该项为TRUE,那么当用户点击广告时,游戏将暂停,广告会显示在屏幕上面。

函数

  • Init - 当引擎处理广告系统初始化时调用的事件。
  • ShowBanner [bShowBottomOfScreen] - 在一个横幅中显示游戏广告。
    • bShowBottomOfScreen - 如果该项为TRUE,那么横幅将显示在屏幕的底部。否则,横幅将显示在屏幕的顶部。
  • HideBanner - 隐藏任何可见的游戏广告横幅。如果广告当前是打开的(也就是,用户正在和广告交互),那么将会强制关闭广告(请参照ForceCloseAd)。
  • ForceCloseAd - 强制关闭打开(点击过)的广告并返回到横幅状态。这将会导致收入损失,所以除非必要否则不要这样做。
  • SetPauseWhileAdOpen [bShouldPause] -设置当点击广告时游戏是否暂停。
    • bShouldPause - 如果该项为TRUE,那么当点击广告时游戏将会暂停。否则,游戏将会继续运行。

Delegates(代理)

ECloudStorageDelegate 枚举值定义了可以接受函数调用的代理类型的ID。通过使用 平台接口代理系统来为这些类型中的任何一种分配代理。

  • AMD_ClickedBanner - 当用户点击横幅广告时,执行分配给这个ID的代理。
    • bSuccessful - TRUE。
    • Data - 不包含数据。
  • AMD_UserClosedAd - 当用户关闭广告(点击横幅之后)时执行分配给该ID的代理。基类已经处理了取消暂停动作,所以如果您需要额外处理仅需要一个代理。
    • bSuccessful - TRUE。
    • Data - 不包含数据。

实现


在iOS平台上应用游戏广告是非常简单的。已经设置好引擎来处理它们。您仅需要设置您想执行的任何代理,然后告诉管理器显示横幅即可。当切换关卡或当玩家结束游戏时需要做一些应该执行的清除处理。

在您的 PlayerController 类的 PostBeginPlay() 函数中,可以分配相关代理并且可以显示横幅。当然,这仅用于您想让横幅自关卡或游戏开始运行就显示的情况。任何需要的时候,您可以在 InGameAdManager 上调用相关功能来显示或隐藏广告。

PlatformInterfaceBase 有一个静态函数,它将返回到当前 InGameAdManager 的引用。您可以在 PlayerController 中使用这个函数来获得到它的引用并调用它的函数。请记住除非游戏在支持游戏广告的平台上运行否则这个函数将返回 None

设置

这里,我们从 PlatformInterfaceBase 获得了到 InGameAdManager 的引用,然后添加我们的delegate(代理)并显示广告横幅。我们已经添加的代理只是一些示例,说明了在适当的时机确实会执行这些代理。

UDNPlayerController.uc
var InGameAdManager AdManager;

...

simulated function PostBeginPlay()
{
   Super.PostBeginPlay();

   AdManager = class'PlatformInterfaceBase'.static.GetInGameAdManager();
   if (AdManager != none)
   {
      AdManager.AddDelegate(AMD_ClickedBanner, OnUserClickedAdvertisement);
      AdManager.AddDelegate(AMD_UserClosedAd, OnUserClosedAdvertisement);
      AdManager.ShowBanner(true);
   }
}

/**
 * Called on all player controllers when an in-game advertisement has been clicked
 * on by the user. Game will probably want to pause, etc, at this point
 */
function OnUserClickedAdvertisement(const out PlatformInterfaceDelegateResult Result)
{
   `log("MobilePC::OnUserClickedBanner");
}

/**
 * Called on all player controllers when an in-game advertisement has been closed
 * down (usually when user clicks Done or similar). Game will want to unpause, etc here.
 */
event OnUserClosedAdvertisement(const out PlatformInterfaceDelegateResult Result)
{
   `log("MobilePC::OnUserClosedAd");
}

Cleanup

通过使用 PlayerControllerDestroyed() 事件允许我们做一些清除处理,比如删除我们之前分配的任何代理。

UDNPlayerController.uc
event Destroyed()
{
   super.Destroyed();

   if (AdManager != none)
   {
      AdManager.ClearDelegate(AMD_ClickedBanner, OnUserClickedAdvertisement);
      AdManager.ClearDelegate(AMD_UserClosedAd, OnUserClosedAdvertisement);
   }
}

结果

在iOS设备上运行在自定义 PlayerController 类中具有上述代码的游戏将会导致广告横幅显示在屏幕的底部。

test_ad.jpg

点击横幅将会打开完整的广告:

test_ad_full.jpg

显然,您在这个阶段仅看到了测试广告,正如在上面图像中所看到的。您将需要加入 iAd Network来接受真实的广告。这可以通过Apple开发者网站来完成。