游戏开发者:广告最佳做法

游戏开发者:广告最佳做法

  1. 简介
  2. 前提条件
  3. 实用的入门信息
  4. OpenGL
    游戏 - 横幅广告

    1. iOS
    2. Android
  5. Unity
    1. 要求
    2. 将插件导入到游戏中
    3. Unity
      插件 API
    4. AdMob
      中介支持
    5. DFP
      广告管理系统支持
  6. Cocos2d-x
    1. 要求

    2. AnySDK 导入到游戏中
    3. AnySDK
      Ads System API
    4. 使用
      AnySDK 程序包工具
    5. AdMob
      中介支持
    6. DFP
      广告管理系统支持
  7. 常见问题解答

简介

本指南介绍使用 Google 移动广告 SDK 将横幅广告和插页式广告与游戏进行集成的最佳做法,具体内容涉及与 Unity 和 Cocos2d-x 游戏引擎的集成,以及常规的基于 OpenGL 的 Android 和 iOS 游戏。

前提条件

  • 下载适用于
    Android 或 iOS 的 Google 移动广告 SDK

实用的入门信息

如果您使用采用 Android 或 iOS 代码的 OpenGL 来集成 Google 移动广告,快速入门指南 (Android | iOS)
和插页式广告指南 (Android |iOS)
是很好的入门信息,可帮助您了解如何使用 SDK。

OpenGL 游戏 - 横幅广告

如果您使用基于 OpenGL 的游戏引擎,但使用原生的 Android 和 iOS SDK 来集成广告,我们建议您仅在游戏暂停或结束时,或者在用户未主动玩游戏的屏幕上展示横幅广告。这样做的优势在于:

  1. 更好的用户体验 - 用户不希望在玩游戏的过程中被广告干扰
  2. 效果 - 广告可能会影响游戏的帧速率
  3. 防止出现意外点击

以下示例说明如何使用最少的代码添加横幅广告。在适当的时间加载横幅广告则是您的责任。

iOS

此示例基于 SpriteKit,但适用于所有框架。当为 SpriteKit 游戏创建新的 Xcode 项目时,您的 GameViewController 的 viewDidLoad 方法的样板代码如下所示:

- (void)viewDidLoad {
  [super viewDidLoad];

  // Configure the view.
  SKView * skView = (SKView *)self.view;
  skView.showsFPS = YES;
  skView.showsNodeCount = YES;
  /* Sprite Kit applies additional optimizations to improve rendering performance */
  skView.ignoresSiblingOrder = YES;

  // Create and configure the scene.
  GameScene *scene = [GameScene unarchiveFromFile:@"GameScene"];
  scene.scaleMode = SKSceneScaleModeAspectFill;

  // Present the scene.
  [skView presentScene:scene];
}

将 SDK 添加到项目后,请更新 viewDidLoad 方法以加入一个横幅广告。在此示例中,我们使用了智能横幅广告格式并在屏幕左上方将其初始化:

- (void)viewDidLoad {
  [super viewDidLoad];

  // Create a banner ad and add it to the view hierarchy.
  self.bannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeSmartBannerPortrait];
  self.bannerView.hidden = YES;
  self.bannerView.adUnitID = @"ca-app-pub-3940256099942544/2934735716";
  self.bannerView.rootViewController = self;
  [self.view addSubview:self.bannerView];

  // Configure the view.
  SKView *skView = (SKView *)self.view;
  skView.showsFPS = YES;
  skView.showsNodeCount = YES;
  /* Sprite Kit applies additional optimizations to improve rendering performance */
  skView.ignoresSiblingOrder = YES;

  // Create and configure the scene.
  GameScene *scene = [GameScene unarchiveFromFile:@"GameScene"];
  scene.scaleMode = SKSceneScaleModeAspectFill;

  // Present the scene.
  [skView presentScene:scene];
}

要解决编译错误,请在文件上部导入 GADBannerView 并添加 bannerView 属性。

#import "GADBannerView.h"

@interface GameViewController()

@property(nonatomic, strong) GADBannerView *bannerView;

@end

您的应用现在已经可以展示横幅广告了。剩下的一个步骤是显示广告和发送广告请求。这可以采用名为 showBanner 的辅助方法来完成:

- (void)showBanner {
  self.bannerView.hidden = NO;
  GADRequest *request = [GADRequest request];
  request.testDevices = @[ GAD_SIMULATOR_ID ];
  [self.bannerView loadRequest:request];
}

调用 showBanner 之后,您的游戏将显示一个横幅广告。

您希望在用户玩游戏期间将广告隐藏起来,这可以通过调用 hideBanner 方法来完成:

- (void)hideBanner {
  self.bannerView.hidden = YES;
}

游戏结束时,请再次调用 showBanner 方法以刷新并显示广告。

Android

大部分基于 OpenGL 的 Android 游戏都使用 SurfaceView 的形式。您的主活动如下所示:

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SurfaceView gameView = new SurfaceView(this);
        setContentView(gameView);
    }
}

以下示例使用 RelativeLayout 将智能横幅广告固定在屏幕底部。

public class MainActivity extends Activity {
    private AdView adView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        SurfaceView gameView = new SurfaceView(this);

        // Create and load the AdView.
        adView = new AdView(this);
        adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111");
        adView.setAdSize(AdSize.SMART_BANNER);

        // Create a RelativeLayout as the main layout and add the gameView.
        RelativeLayout mainLayout = new RelativeLayout(this);
        mainLayout.addView(gameView);

        // Add adView to the bottom of the screen.
        RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        mainLayout.addView(adView, adParams);

        // Set the RelativeLayout as the main layout.
        setContentView(mainLayout);
    }
}

您的应用现在已经可以展示横幅广告了。剩下的一个步骤是显示广告和发送广告请求。这可以采用名为 showBanner 的辅助方法来完成:

private void showBanner() {
  adView.setVisibility(View.VISIBLE);
  adView.loadAd(new AdRequest.Builder()
      .addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build());
}

调用 showBanner 之后,您的游戏将显示一个横幅广告。

您希望在用户玩游戏期间将广告隐藏起来,这可以通过调用 hideBanner 方法来完成:

private void hideBanner() {
  adView.setVisibility(View.GONE);
}

游戏结束时,请再次调用 showBanner 方法以刷新并显示广告。

Unity

下载插件 查看源代码

如果您使用 Unity 游戏引擎,则可以使用官方支持的插件在
Unity 开发环境中编写脚本,以将横幅广告和插页式广告投放到 Android 游戏和 iOS 游戏中。

要求

  • Unity 4 或更高版本
  • Google 移动广告 SDK

将插件导入到游戏中

  1. 在 Unity 编辑器中打开您的项目。选择“Assets”(资源)>“Import Package”(导入程序包)>“Custom Package”(自定义程序包)并找到您下载的 GoogleMobileAdsPlugin.unitypackage 文件。

  2. 确保选择所有文件,然后点击 Import(导入)

我已经拥有 AndroidManifest.xml 文件

如果您的项目已经有 Assets/Plugins/Android/AndroidManifest.xml 文件,您可以选择不从GoogleMobileAds.unitypackage 导入此文件,但您需要先更新该清单文件,以将unityplayer.ForwardNativeEventsToDalvik 元数据标记添加到 Unity 主活动中(以下突出显示的内容):

<activity android:name="com.unity3d.player.UnityPlayerNativeActivity"
    android:label="@string/app_name">
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
    <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik"
        android:value="true" />
</activity>

在 Unity 主活动中,将 unityplayer.ForwardNativeEventsToDalvik 标记设置为 true 可确保广告是可以点击的。

您还需要按照快速入门指南中的介绍对清单文件做出更改。

运行您的项目

根据您的平台完成以下相应步骤,将 Android 和 iOS 版本的 Google 移动广告 SDK 导入到项目中。完成这些步骤后,请参阅 Unity
插件 API
 部分,详细了解如何使用插件请求横幅广告和插页式广告。

Android
  1. 此插件要求项目中包含 Google Play 服务库。将整个<android_sdk>/extras/google/google_play_services/libproject/google-play-services_lib/ 文件夹添加到 Unity 项目的 Assets/Plugins/Android 文件夹中。
  2. 转到“File”(文件)>“Build Settings”(构建设置),选择 Android 平台,然后选择 Build and Run(构建并运行)

您已为 Android 导入了该插件!

iOS
  1. 转到“File”(文件)>“Build Settings”(构建设置),依次选择 iOS 平台和 Build(构建)。这将会导出 Xcode 项目。
  2. 打开导出的 Xcode 项目,并按照 iOS 快速入门指南中的手动导入部分来添加
    Google 移动广告 SDK。
  3. 在 Xcode 中,转到“Product”(产品)>“Run”(运行)以运行您的项目。

现在您已为 iOS 成功导入该插件!

Unity 插件 API

您可以在 Google 移动广告插件中使用常用的 C# API 来请求横幅广告和插页式广告。这段代码只需编写一次即可,然后可以分别部署到 Android 设备和 iOS 设备中。

基本的横幅广告请求

以下是创建和加载横幅广告所需的最少代码。

using GoogleMobileAds.Api;
…
private void RequestBanner()
{
    #if UNITY_ANDROID
        string adUnitId = "INSERT_ANDROID_BANNER_AD_UNIT_ID_HERE";
    #elif UNITY_IPHONE
        string adUnitId = "INSERT_IOS_BANNER_AD_UNIT_ID_HERE";
    #else
        string adUnitId = "unexpected_platform";
    #endif

    // Create a 320x50 banner at the top of the screen.
    BannerView bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Top);
    // Create an empty ad request.
    AdRequest request = new AdRequest.Builder().Build();
    // Load the banner with the request.
    bannerView.LoadAd(request);
}

AdPosition 枚举会指定横幅广告的展示位置。

请注意,不同广告单元的使用方式要取决于具体的平台。具体来说,在使用 AdMob 时,您需要使用 iOS 广告单元在 iOS 设备上发送广告请求,使用 Android 广告单元在 Android 设备上发送广告请求。

基本的插页式广告请求

以下是加载插页式广告所需的最少代码。

using GoogleMobileAds.Api;
…
private void RequestInterstitial()
{
    #if UNITY_ANDROID
        string adUnitId = "INSERT_ANDROID_INTERSTITIAL_AD_UNIT_ID_HERE";
    #elif UNITY_IPHONE
        string adUnitId = "INSERT_IOS_INTERSTITIAL_AD_UNIT_ID_HERE";
    #else
        string adUnitId = "unexpected_platform";
    #endif

    // Initialize an InterstitialAd.
    InterstitialAd interstitial = new InterstitialAd(adUnitId);
    // Create an empty ad request.
    AdRequest request = new AdRequest.Builder().Build();
    // Load the interstitial with the request.
    interstitial.LoadAd(request);
}

与横幅广告不同,插页式广告需要显式展示。请在游戏的适当停止点(例如当前关卡结束时)检查插页式广告是否已准备好进行展示。展示插页式广告的一个好时机是在游戏结束时:

private void GameOver()
{
  if (interstitial.IsLoaded()) {
    interstitial.Show();
  }
}

自定义广告尺寸

您可以为广告指定一个自定义的尺寸而不使用 AdSize 常量。

AdSize adSize = new AdSize(250, 250);
BannerView bannerView = new BannerView(adUnitId, adSize, AdPosition.Bottom);

测试广告

我们建议您在开发过程中请求测试广告,以免产生不当的广告展示。要请求测试广告,请在构建广告请求时将加密的设备 ID 添加到AddTestDevice 方法。无论是 Android 还是 iOS,当您的应用运行并发送有效请求时,此 ID 只能在日志中找到。

以下说明了如何在构建广告请求时加入测试设备。

AdRequest request = new AdRequest.Builder()
    .AddTestDevice(AdRequest.TestDeviceSimulator)       // Simulator.
    .AddTestDevice("2077ef9a63d2b398840261c8221a0c9b")  // My test iPod Touch 5.
    .Build();

广告请求定位

要向广告请求提供额外的定位信息,请在构建请求时设置这些定位参数。此广告请求示例显示了可以使用哪些定位方法。

AdRequest request = new AdRequest.Builder()
    .SetGender(Gender.Male)
    .SetBirthday(new DateTime(1985, 1, 1))
    .TagForChildDirectedTreatment(true)
    .AddExtra("excl_cat", "cars,sports") // Category exclusions for DFP.
    .Build();

广告事件

BannerView 和 InterstitialAd 都包含您可以注册的相同广告事件。这些事件是 EventHandler 类型。以下示例说明如何在横幅广告上设置广告事件:

private void RequestBanner()
{
    BannerView bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Top);
    // Called when an ad request has successfully loaded.
    bannerView.AdLoaded += HandleAdLoaded;
    // Called when an ad request failed to load.
    bannerView.AdFailedToLoad += HandleAdFailedToLoad;
    // Called when an ad is clicked.
    bannerView.AdOpened += HandleAdOpened;
    // Called when the user is about to return to the app after an ad click.
    bannerView.AdClosing += HandleAdClosing;
    // Called when the user returned from the app after an ad click.
    bannerView.AdClosed += HandleAdClosed;
    // Called when the ad click caused the user to leave the application.
    bannerView.AdLeftApplication += HandleAdLeftApplication;
}

public void HandleAdLoaded(object sender, EventArgs args)
{
    print("HandleAdLoaded event received.");
    // Handle the ad loaded event.
}

AdFailedToLoad 事件包含特殊的事件参数。该事件会传递一个 AdFailedToLoadEventArgs 实例,此实例具有一个说明错误内容的 Message

public void HandleAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
  print("Interstitial Failed to load: " + args.Message);
  // Handle the ad failed to load event.
};

您只需注册自己感兴趣的事件。

显示和隐藏横幅广告

默认情况下,横幅广告是可见的。要暂时隐藏横幅广告,请调用:

bannerView.Hide();

要重新显示该广告,请调用:

bannerView.Show();

清除横幅广告和插页式广告

当完成 BannerView 或 InterstitialAd 后,请在放弃对其的引用之前调用 Destroy() 方法。

bannerView.Destroy();
interstitial.Destroy();

这会通知插件应该将此对象作为垃圾进行收集。不调用此方法将导致内存泄漏。

AdMob 中介支持

要使用 Unity 插件执行中介功能,您必须按照中介快速入门指南 (Android | iOS)
中的介绍,为每个第三方广告网络下载并添加 SDK 和适配器库。以下是针对不同设备的不同操作:

  • 对于 Android,将所需的库添加到项目的 Assets/Plugins/Android 目录中。
  • 对于 iOS,将所需的库添加到 Xcode 项目中,该项目是您为 iOS 构建项目时由 Unity 生成的。

DFP 广告管理系统支持

正如 Unity
Plugin API
 中所述,Unity 插件支持 DFP 广告单元、自定义广告尺寸和自定义定位。

该插件当前不支持更高级的 DFP 功能,如多个广告尺寸、应用事件和手动展示次数计数。

Cocos2d-x

如果您使用任何的 Cocos2d-x 游戏引擎,则可以集成 AnySDK 框架并构造您的应用以便使用广告系统,从而通过
Android 和 iOS 应用获利。

本指南介绍针对 Cocos2d-x 应用的 AnySDK 集成,但这些概念也适用于整个 Cocos2d-x 引擎套件。

要求

  • Cocos2d-x 的最新版本
  • AnySDK 框架 v1.2.3
    或更高版本
  • AnySDK 程序包工具

将 AnySDK 导入到游戏中

AnySDK 快速入门指南详细介绍了如何在
C++ 和 Android 级别导入 AnySDK,请查看该指南以了解相关信息。

AnySDK Ads System API

成功导入 AnySDK 后,您可以参阅广告系统指南,编写针对
AnySDK 广告系统的代码。

AdMob 支持 AD_TYPE_BANNER 和 AD_TYPE_FULLSCREEN 格式。我们将介绍一些集成 AdMob 的常用方法。

横幅广告

要请求和展示横幅广告,请使用 AD_TYPE_BANNER 广告类型的 showAds 方法。

AdsPlugin* ads = AgentManager::getInstance()->getAdsPlugin();
ads->showAds(AD_TYPE_BANNER);

要停止展示横幅广告,请使用 hideAds 方法。

ads->hideAds(AD_TYPE_BANNER);

插页式广告

在您显式展示插页式广告之前,应该使用 AD_TYPE_FULLSCREEN 广告类型的 preloadAds 方法预加载相应的广告。

AdsPlugin* ads = AgentManager::getInstance()->getAdsPlugin();
ads->preloadAds(AD_TYPE_FULLSCREEN);

当您稍后要展示插页式广告时,请调用 showAds

ads->showAds(AD_TYPE_FULLSCREEN);

使用多个横幅广告或插页式广告

如果您需要使用多个横幅广告尺寸或不同的广告单元 ID,则可以向 showAdshideAds 和 preloadAds 方法传递一个索引。以下是一些示例:

ads->showAds(AD_TYPE_BANNER, 2); // show banner #2
ads->hideAds(AD_TYPE_BANNER, 2); // hide banner #2
ads->showAds(AD_TYPE_FULLSCREEN, 2); // preload interstitial #2
ads->preloadAds(AD_TYPE_FULLSCREEN, 2); // show interstitial #2

如果不指定索引,则默认为 1

当您稍后使用 AnySDK 程序包工具配置 AdMob 时,可以设置每个横幅广告的广告单元 ID、广告尺寸以及展示位置,还可以设置每个插页式广告的广告单元 ID。

注意:假设您的游戏有 4 个横幅广告展示位置和 2 个插页式广告展示位置。您应该将横幅广告从 1 到 4 进行编号,将插页式广告从1 到 2 进行编号。AnySDK
程序包工具希望您使用这种编号方案。

监听广告事件

如果需要获得广告事件的通知(例如成功接收到广告),请指定实现 AdsListener 的类。它只提供一个方法(即 onAdsResult),该方法会通知您所有事件。

AdMob 支持以下广告事件:

  • kAdsReceived
  • kAdsShown
  • kAdsDismissed
  • kNetworkError
  • kUnknownError

onAdsResult 方法的典型实现框架如下所示:

void onAdsResult(AdsResultCode code, const char* msg) {
  switch(code) {
    case kAdsReceived:
      // Ad has been received.
      break;
    case kAdsShown:
      // Ad is presenting a full screen view.
      break;
    case kAdsDismissed:
      // A full screen ad view is being dismissed.
      break;
    case kNetworkError:
      // Ad failed due to network error.
      break;
    case kUnknownError:
      // Ad failed.
      break;
    default:
      break;
  }
}

在这里,您可以决定针对各个事件采取的措施。

最后,请注意设置广告插件的广告监听器,以便告知 AnySDK 哪些类应该接收广告事件:

AgentManager::getInstance()->getAdsPlugin()->setAdsListener(this);

使用 AnySDK 程序包工具

将您的应用配置为使用 AnySDK 广告系统后,请使用 AnySDK
程序包工具
启用 AdMob 以填充您的广告空间。您必须分别针对 Android 和 iOS 配置 AnySDK,针对这两个平台的配置过程如下所述:

Android

  1. 在 AnySDK 应用配置的 SDK Management(SDK 管理)部分,指定 AdMob 作为广告提供商,并选择您的应用支持哪些格式。

  2. 在 Parameter Config(参数配置)部分,为横幅广告和/或插页式广告输入 Android 广告单元 ID,还请输入广告尺寸和展示位置(如果您使用的是横幅广告)。

    如果您的应用设置为使用多个横幅广告(参见使用多个横幅广告或插页式广告部分),请点击 + 标签为每个横幅广告配置广告单元。另请针对插页式广告执行相同操作。

  3. 最后,在 Publishing(发布)标签中,选择 Browse(浏览)并找到应用的 .apk 文件。然后点击 Start(开始)

就这么简单!此步骤会生成一个包含 AdMob 的项目版本!

iOS

  1. 在 AnySDK 应用配置的 SDK Management(SDK 管理)部分,指定 iOS-AdMob 作为广告提供商,并选择您的应用支持哪些格式。

  2. 在 Parameter Config(参数配置)部分,为横幅广告和/或插页式广告输入 iOS 广告单元 ID,还请输入广告尺寸和展示位置(如果您使用的是横幅广告)。

    如果您的应用设置为使用多个横幅广告(参见使用多个横幅广告或插页式广告部分),请点击 + 标签为每个横幅广告配置广告单元。另请针对插页式广告执行相同操作。

  3. 在 Publishing(发布)标签中,依次选择 Browse(浏览)以及您的 Cocos2d-x 项目的最高级目录。

    当系统询问您要使用哪个 .xcodeproj 时,选择 proj.ios_mac/ 目录下的项目,并点击 OK(确定)。然后点击 Start(开始)

    就这么简单!此步骤会生成一个包含 AdMob 的项目版本!

AdMob 中介支持

要使用 AnySDK 框架执行中介功能,您必须按照中介快速入门指南 (Android | iOS)
中的介绍,为每个第三方广告网络下载并添加 SDK 和适配器库。以下是针对不同设备的不同操作:

  • 对于 Android,在使用 AnySDK 程序包工具前,将所需的库添加到项目的 libs/ 文件夹中。
  • 对于 iOS,在使用 AnySDK 程序包工具之前,将所需的库添加到 Xcode 项目中。

DFP 广告管理系统支持

AnySDK 接受 DFP 广告单元,但您只能使用 AnySDK 提供的广告尺寸常量。自定义广告尺寸和自定义定位不受支持。

常见问题解答

我使用的游戏引擎是本指南中未提到的引擎。我该如何集成 Google 移动广告?
请参阅横幅广告最佳做法,该指南适用于在任何游戏中实现广告。
从哪里可以获得有关 Unity 的帮助?
有关 Google 移动广告 Unity 插件的疑问,请参阅 Google 移动广告 SDK 开发者论坛。要报告错误,请将问题添加到
GitHub 上的问题跟踪页面。对于常见的
Unity 问题,请咨询 Unity 社区
从哪里可以获得有关 Cocos2d-x 的帮助?
请使用 AnySDK 联系表单获取有关
AnySDK 框架集成、AnySDK 程序包工具使用和错误报告方面的帮助。

本页面中的内容已获得知识共享署名3.0许可,并且代码示例已获得Apache
2.0许可
;另有说明的情况除外。有关详情,请参阅我们的网站政策

时间: 2024-10-02 13:31:38

游戏开发者:广告最佳做法的相关文章

99%游戏开发者都不知道的游戏运营词汇

作为游戏开发者,在实际工作过程中经常遇到一些 游戏运营词汇 .它们可以从各个层面来衡量游戏的健康状态,供我们进行分析,发现游戏存在的问题.那么究竟该留意哪些些数据呢?或者说该从何入手了解这些数据?本文提供一个简单的索引,帮助大家认清方向,同时也可以方便的查看相关的概念. 数据收集模型 AARRR Acquisition 获取用户 Activation 提高激活率 Retention 提高留存 Revenue 获取收入 Refer 病毒传播 模型着眼于,用户从何而来>用户满意程度>用户带来价值,

新站帮助 Google 查找、抓取网站和创建索引的最佳做法

遵循这些指南有助于 Google 查找您的网站.将其编入索引和进行排名.即使您选择不采纳这些建议,我们也强烈建议您对"质量指南"多加留意,其中简要说明了可能导致网站从 Google 索引中被彻底删除或者被系统或手动标识为垃圾网站的一些违规行为.如果一个网站被标识为垃圾网站,那么它可能不会再出现在 Google.com 或任何 Google 合作伙伴网站的搜索结果中. 设计和内容指南 技术指南 质量指南 在您的网站创建完成后: 访问 http://www.google.com/submi

游戏开发者面临的几大问题

作者:David Maletz 译文:gamerboom 独立游戏开发领域聚集了大批希望在此实现游戏制作梦想的幻想家与乐观派.最近,我发现不少悲观文章力图阻挠开发者制作游戏,它们清晰展示出游戏开发的阴暗与困难面.坦白讲,游戏开发并非易事,在此过程中你会面临大量障碍.本文意在列举我在过去五年发现的某些障碍问题,这些都是真实情况.可能有点残酷,可能如我所言的“打算制作游戏的都是疯子!”然而,本文并非旨在阻止游戏开发者.相反,你可以借此从历经大量失败的开发者身上获取启发,从而让自己少走弯路. indi

知物由学|游戏开发者如何从容应对Unity手游风险?

"知物由学"是网易云易盾打造的一个品牌栏目,词语出自汉·王充<论衡·实知>.人,能力有高下之分,学习才知道事物的道理,而后才有智慧,不去求问就不会知道."知物由学"希望通过一篇篇技术干货.趋势解读.人物思考和沉淀给你带来收获的同时,也希望打开你的眼界,成就不一样的你.当然,如果你有不错的认知或分享,也欢迎通过邮件([email protected])投稿. 以下为正文: 3月25日,2018 Unity技术路演首站:移动游戏技术分享日在广州举办.此次活动

Cocos引擎现身 IndiePrize 全球游戏开发者大会!Cocos的两大男神成为压轴嘉宾

2019全球游戏开发者大会今天11月10日,在深圳南山海上世界文化艺术中心拉开帷幕.除了号称精品游戏"奥斯卡"的IndiePrize将在现场展开最终角逐,更有来自美国.俄罗斯.澳大利亚.新加坡.马来西亚.乌克兰等全球50多个国家和地区的游戏大佬前来交流.演讲,共同推动游戏产业的发展.当然,这次我们最可爱的"Cocos"也来了! 大会的第一天是一些游戏行业还有技术的演讲:第二天主要是IndiePrize的评选:第三天下午还有传说中的 panda 和 jare 的两个

编写Dockerfiles的最佳做法

编写Dockerfiles的最佳做法 Docker可以通过从Dockerfile包含所有命令的文本文件中读取 指令,自动构建图像,以便构建给定图像所需的顺序.Dockerfile坚持一个具体的格式,并使用一组具体的说明.您可以在Dockerfile参考页面上了解基础知识 .如果你是新来Dockerfile的,你应该从那里开始. 本文档介绍了Docker,Inc.和Docker社区推荐的最佳做法和方法,以创建易于使用,有效 Dockerfile的.我们强烈建议您遵循这些建议(实际上,如果您正在创建

SharePoint Server 2013 中的爬网最佳做法

了解在 SharePoint Server 2013 中爬网的最佳做法 搜索系统对内容进行爬网,以构建一个用户可以对其运行搜索查询的搜索索引.本文包含有关如何最有效地管理爬网的建议. 本文内容: 使用默认内容访问帐户对大部分内容进行爬网 有效使用内容源 对用户配置文件进行爬网,然后再对 SharePoint 网站进行爬网 使用连续爬网确保搜索结果为最新 使用爬网规则排除已爬网的不相关的内容 对 SharePoint Web 应用程序的默认区域进行爬网 降低对 SharePoint 爬网目标进行爬

【转】移动App测试中的最佳做法

一说起软件测试,测试员想到肯定是去检查文件,功能,API,性能并确定软件是否安全,以及关于软件特定部分的其他事项.但是对于移动测试,测试员不得不基于用户移动使用模式考虑移动相关的功能. 本文是基于我的工作经验而写的.作为一名敏捷软件开发团队的软件质量保证经理,我一心投入iPhone,Android,WindowsPhone7的移动apps和移动webapps.在XING移动团队的日常工作以及与其他移动测试专家交流的过程中,我深刻了解了移动测试工作的困难.渐渐地,我明确了什么是帮助改进同事们和我的

致独立游戏开发者的一封信

亲爱的独立游戏开发者们: 大家好!今天是个特别的日子,我怀着无比激动的心情,告诉大家一个好消息:独立游戏开发者社区正式成立了.我们不需要再分散在各大论坛,我们不需要再流离在街头,无人倾听我们的声音.我们将有属于自己的社区,属于自己的家,属于独立人的自由舞台! 从萌发创建独立游戏开发者社区这一想法时,我的脑海里就无数次浮现同一个问题,为什么要创建独立游戏开发者社区?她有何价值?今天,对这一问题,我将与大家一起探讨,分享,求解问题的答案.当我想开口回答这个问题时,又觉得不知从何说起. 当我奔跑于各大