
Приветствую! Наверное каждый разработчик игр, рано или поздно задумывается о том, чтобы начать зарабатывать деньги на своей игре с помощью рекламы. И в данной статье мы пошагово разберём подключение рекламы с помощью Unity Ads.
Подключение монетизации состоит из нескольких очень простых шагов, и начнём мы свой пусть с создания игрового ID. Но если для своего проекта вы уже создали уникальный ID, то данный пункт можете пропустить.
Создание ID проекта
Каждый проект должен иметь собственный уникальный ID, и поэтому сейчас нам его необходимо создать. Для этого откроем окно Project Settings (вкладка Edit - Project Settings...), и в разделе Services в поле Organizations выбираем свою организацию, которая автоматически создалась после регистрации на юнити, и потом жмём кнопку Create project ID.

Далее подгрузится новое окошко, в котором нужно указать, является ли данная игра, детской, до 13 лет? Если нет, то указываем No, и жмём кнопку Save.

Поздравляем, ID для вашего проекта создан, и теперь можно переходить к подключению рекламного модуля Unity Ads.
Подключение Unity Ads
Пришло время для подключения специального модуля, который отвечает за рекламу. Для этого, в этом же окне Project Settings перейдите в раздел Ads, и нажмите на кнопку OFF, которая сразу же превратится в ON. Чуть ниже, необходимо нажать на кнопку Install Latest Version, для обновления новой версии рекламного пакета. В итоге, в поле Current Version должна быть такая же версия пакета, которая указана в поле Latest Version Avaliable.
ВАЖНО: при обновлении пакета может произойти внутренний конфликт и выскочить диалоговое окно, которое предложит удалить данный пакет, либо пропустить. Обязательно необходимо пропустить!
Так же в поле Enable test mode поставьте галочку, чтобы реклама работала в тестовом режиме. Как только ваша игра будет полностью завершена, то перед билдом эту галочку нужно будет ОБЯЗАТЕЛЬНО снять!

Поздравляем, мы только что подключили Unity Ads, который в свою очередь сгенерировал для нас игровой ID для нашей игры, и он кстати говоря разный для Android и для iOS. Значения этих ID можно видеть не только на скриншоте выше, но и в своём личном кабинете на сайте unity. Данные ID чуть позже нам пригодятся для скриптов.
Настройка монетизации
Пришло время для настройки монетизации. А настраивать её мы будем в личном кабинете Unity. Для этого откроем окно Services, с помощью вкладки Window - General - Services. Данное окно откроется с правой стороны юнити, и жмём в ней на Dashboard.

Далее вас перенаправит на личный кабинет, в котором необходимо выбрать раздел Monetization и нажать на кнопку Set Mediation Partner, для указания рекламного посредника.

После нажатия на кнопку, вам необходимо выбрать способ монетизации. Выбираем самый первый способ I Don't plan to use Mediation, only Unity Ads, чтобы указать, что мы не хотим работать с посредниками, а только напрямую с Unity, и жмём OK.

После чего нас перекинет в подраздел Ad Units, в котором мы можем увидеть наши ID для игр Android и iOS, а так же 6 созданных видов реклам, вместе с их id:
- Interstitial - реклама, которую игрок может пропустить.
- Rewarded - реклама, которую нельзя пропустить. Обычно за просмотр такой рекламы, игроку начисляются какие-нибудь бонусы.
- Banner - баннер, который постоянно висит на экране. Он почти никогда не используется, из-за экономия места экрана телефона.

Отлично, монетизация подключена, теперь осталась завершающая часть, вызов нашей рекламы в игре с помощью скриптов.
Скрипты
Всё это время мы проводили можно сказать подготовительную работу, а сейчас перейдём непосредственно к скриптам, чтобы вызывать нашу рекламу, и отображать её игрокам. И первым делом необходимо в окне Hierarchy создать пустой объект, назовём его Ads, который нужен исключительно для работы наших рекламных скриптов.
Инициализация рекламы
Далее создадим i[iC# скрипт с названием AdsInitializer. Данный скрипт самый важный. Он будет инициализатором, то-есть он будет создавать подключения к рекламной сети Unity Ads. Заранее присвоим его к только что созданному объекту Ads, и впишем в данный скрипт следующий код:
using UnityEngine;
using UnityEngine.Advertisements;
public class AdsInitializer : MonoBehaviour, IUnityAdsInitializationListener
{
[SerializeField] string androidGameID = "5061567";
[SerializeField] string iOSGameID = "5061566";
[SerializeField] bool testMode = true;
private string gameID;
private void Awake()
{
gameID = (Application.platform == RuntimePlatform.IPhonePlayer) ? iOSGameID : androidGameID;
Advertisement.Initialize(gameID, testMode, this);
}
public void OnInitializationComplete()
{
Debug.Log("Инициализация прошла успешно.");
}
public void OnInitializationFailed(UnityAdsInitializationError error, string message)
{
Debug.Log($"Ошибка инициализации: {error.ToString()} - {message}");
}
}
Вкратце разберём код:
- В строке #2 мы подключаем библиотеку UnityEngine.Advertisements, так как работаем с рекламой. А чуть ниже наследуем итерфейс IUnityAdsInitializationListener.
- В строках #6-7 мы создали переменные, в которые необходимо занести ID нашей игры для андройда и айфона.
- В строке #8 мы укажем, что реклама должна отображаться в тестовом режиме. При завершении разработки игры, необходимо изменить данное значение на false.
- В методе Awake() мы проверяем устройство игрока, если это айфон, то в переменную gameID заносим ID айфона, иначе в данную переменную заносим ID андройда.
- Ну а в строке #14, с помощью метода Initialize() мы проводим подключение к рекламной сети. Если подключение прошло успешно, то вызывается метод OnInitializationComplete(), а если произошла ошибка, то вызывается метод OnInitializationFailed().
На этом этапе можете запустить игру. Если вы всё сделали правильно, то в консоле можете видеть сообщение об успешной инициализации. А если нет - то сообщение об ошибке инициализации.
Реклама Interstitial
Создадим C# скрипт, с названием InterstitialAds, который будет отображать стандартную рекламу типа Interstitial. Заранее присвоим этот скрипт объекту Ads, и впишем в него следующий код:
using UnityEngine;
using UnityEngine.Advertisements;
public class InterstitialAds : MonoBehaviour, IUnityAdsLoadListener, IUnityAdsShowListener
{
[SerializeField] string androidAdID = "Interstitial_Android";
[SerializeField] string iOSAdID = "Interstitial_iOS";
private string adID;
private void Awake()
{
adID = (Application.platform == RuntimePlatform.IPhonePlayer) ? iOSAdID : androidAdID;
}
public void ShowAd()
{
Advertisement.Load(adID, this);
Advertisement.Show(adID, this);
}
public void OnUnityAdsAdLoaded(string placementId)
{
Debug.Log("Реклама загружена: " + placementId);
}
public void OnUnityAdsFailedToLoad(string placementId, UnityAdsLoadError error, string message)
{
Debug.Log($"Ошибка загрузки рекламы: {error.ToString()} - {message}");
}
public void OnUnityAdsShowFailure(string placementId, UnityAdsShowError error, string message)
{
Debug.Log($"Ошибка показа рекламы: {error.ToString()} - {message}");
}
public void OnUnityAdsShowStart(string placementId)
{
Debug.Log("Старт показа реклама: " + placementId);
}
public void OnUnityAdsShowClick(string placementId)
{
Debug.Log("клик по рекламе: " + placementId);
}
public void OnUnityAdsShowComplete(string placementId, UnityAdsShowCompletionState showCompletionState)
{
Debug.Log("Юнити завершил показ рекламы.");
}
}
Разбирать данный скрипт мы не будем, поскольку он очень похож на предыдущий. То-есть, здесь так же создаём переменные для Android и iOS, и определяем устройство пользователя. Здесь так же имеется 6 обработчиков событий, которые в консоль заносят различные уведомления.
Важно! Единственное на что хотелось бы обратить внимание, это на метод ShowAd(), который сначала с помощью метода Load() подгружает рекламу, а потом с помощью метода Show() отображает её на экране для пользователя. Именно этот метод и нужно вызывать тогда, когда вам необходимо отобразить рекламу на игровой сцене. Например вызов данного метода можно произвести сразу после нажатия на определённую кнопку.
Реклама Rewarded
Создадим C# скрипт с названием RewardedAds, который будет вызывать рекламу типа Rewarded - которую нельзя пропустить, и за которую обычно игроку даются какие-либо бонусы. Присвойте его объекту Ads, и впишите в него следующий код:
using UnityEngine;
using UnityEngine.Advertisements;
public class RewardedAds : MonoBehaviour, IUnityAdsLoadListener, IUnityAdsShowListener
{
[SerializeField] string androidAdID = "Rewarded_Android";
[SerializeField] string iOSAdID = "Rewarded_iOS";
private string adID;
private void Awake()
{
adID = (Application.platform == RuntimePlatform.IPhonePlayer) ? iOSAdID : androidAdID;
}
public void ShowAd()
{
Advertisement.Load(adID, this);
Advertisement.Show(adID, this);
}
public void OnUnityAdsAdLoaded(string placementId)
{
Debug.Log("Реклама загружена: " + placementId);
}
public void OnUnityAdsFailedToLoad(string placementId, UnityAdsLoadError error, string message)
{
Debug.Log($"Ошибка загрузки рекламы: {error.ToString()} - {message}");
}
public void OnUnityAdsShowFailure(string placementId, UnityAdsShowError error, string message)
{
Debug.Log($"Ошибка показа рекламы: {error.ToString()} - {message}");
}
public void OnUnityAdsShowStart(string placementId)
{
Debug.Log("Старт показа реклама: " + placementId);
}
public void OnUnityAdsShowClick(string placementId)
{
Debug.Log("клик по рекламе: " + placementId);
}
public void OnUnityAdsShowComplete(string placementId, UnityAdsShowCompletionState showCompletionState)
{
if (showCompletionState.Equals(UnityAdsShowCompletionState.COMPLETED))
{
// тут код для добавления бонусов игроку.
Debug.Log("Юнити завершил показ рекламы, и добавил бонусы игроку.");
}
}
}
Как видите, код почти такой же, как и предыдущий. Вызов рекламы так же создаётся при помощи метода ShowAd(). Единственное, на что хотелось бы обратить внимание, это на метод OnUnityAdsShowComplete() в строке #46. Здесь мы можем дописать код, который будет добавлять различные бонусы за просмотр рекламы.
Реклама Banner
Создадим C# скрипт с названием BannerAd, который будет вызывать рекламу типа Banner - которая отображается всегда, где-нибудь сбоку экрана. Такую рекламу используют очень редко, поскольку она занимает достаточно много места на экране, и мешает самой игре. Присвойте данный скрипт объекту Ads, и впишите в него следующий код:
using UnityEngine;
using UnityEngine.Advertisements;
public class BannerAd : MonoBehaviour
{
[SerializeField] BannerPosition bannerPosition;
[SerializeField] string androidAdID = "Banner_Android";
[SerializeField] string iOSAdID = "Banner_iOS";
private string adID;
private void Awake()
{
adID = (Application.platform == RuntimePlatform.IPhonePlayer) ? iOSAdID : androidAdID;
}
private void Start()
{
Advertisement.Banner.SetPosition(bannerPosition);
}
public void ShowAd()
{
BannerLoadOptions optionsLoad = new BannerLoadOptions {loadCallback = OnBannerLoaded, errorCallback = OnBannerError};
Advertisement.Banner.Load(adID, optionsLoad);
BannerOptions optionsShow = new BannerOptions {clickCallback = OnBannerClicked, hideCallback = OnBannerHidden, showCallback = OnBannerShow};
Advertisement.Banner.Show(adID, optionsShow);
}
private void OnBannerLoaded()
{
Debug.Log("Баннер загружен");
}
private void OnBannerError(string message)
{
Debug.Log($"Ошибка загрузки баннера: {message}");
}
private void OnBannerClicked()
{
Debug.Log("Баннер был кликнут");
}
private void OnBannerHidden()
{
Debug.Log("Баннер был скрыт");
}
private void OnBannerShow()
{
Debug.Log("Баннер был показан");
}
}
Как видите, данный тип рекламы так же очень похож на предыдущие, за исключением новой переменной bannerPosition, которая отвечает за позицию расположения баннеров. Эту позиции можно указать с помощью окна Inspector. Здесь так же, как и в двух других скриптах, присутствует метод ShowAd() для вызова рекламы.
Завершение
После всех манипуляций со скриптами, у нашего объекта Ads, в окне Inspector мы можем наблюдать 4 скрипта: первый скрипт служит подключением к рекламной сети, а остальные 3 скрипта для отображения различных типов реклам.

Важно! Если вы с помощью метода ShowAd() запускаете рекламу в самом начале игры, то у вас может произойти ошибка по причине того, что скрипт показа рекламы может сработать раньше, чем скрипт инициализации. Поэтому необходимо метод ShowAd() вызывать не сразу после запуска сцены, а спустя какое-то время, например 0.5 секунд. А ещё лучше, инициализацию провести в методе Awake().
А на этом всё. Я постарался очень подробно и понятно объяснить подключение монетизации, и надеюсь я вам очень помог. А если остались вопросы, пишите в комментариях, с радостью отвечу.
Спасибо! Всё понятно и доходчиво. Действительно удалось настроить показ рекламы на моём проекте. Но публикацию в Google Play мне отклоняют, по причине того, что в показываемой рекламе есть нарушения. ЦИТАТА:"Как контент приложения, так и показываемые в нем объявления и связанные с ними предложения (например, когда реклама предлагает скачать другое приложение), необходимо подбирать с учетом возрастных ограничений приложения."
Вопрос: как настроить показ рекламы удовлетворяющий требования Google Play?