С помощью этой оболочки вы получите доступ к YouTube Playables SDK в Unity C#. В оболочке есть плагин .jslib и файл C# для ускорения разработки. Также доступен пример проекта, демонстрирующий, как использовать эти элементы в вашем проекте.
Пакеты Unity можно загрузить из нашего репозитория примеров Playables.
Использование
- Убедитесь, что в качестве платформы вашего проекта Unity выбран
WebGL
. Этот параметр можно найти вBuild Settings
. - Либо используйте
WebGLTemplate
для создания своей игры для веба, либо следуйте разделу Использование собственного файла index.html и убедитесь, что вы настроили и инициализировали веб-SDK в файлеindex.html
.-
WebGLTemplate
находится в пакетеGoogle-WebGLTemplate-only.unitypackage
илиGoogleYTGameWrapper-with-sample.unitypackage
. Чтобы настроить и использовать этот шаблон, следуйте инструкциям в разделе «Шаблоны WebGL» . - Чтобы использовать собственный файл Web и
index.html
, вам потребуется добавить две строки в скрипт созданияindex.html
в Unity, см. раздел Использование собственного файла index.html для интеграции.
-
- Откройте свой проект в Unity, затем откройте и импортируйте любой пакет в свой проект.
-
GoogleYTGameWrapper.unitypackage
: содержит плагин JS для подключения YouTube Playables SDK и оболочку C#, помогающую подключить его к вашему продукту. -
GoogleYTGameWrapper-with-sample.unitypackage
: содержит те же файлы, что и в пакете GoogleYTGameWrapper, а также пример, демонстрирующий, как использовать YouTube Playables SDK в C#.
-
- ВАЖНО: В основной сцене создайте новый игровой объект и назовите его
YTGameWrapper
. Этот игровой объект будет использоваться для взаимодействия с JS-мостом. - ВАЖНО: Добавьте импортированный код
YTGameWrapper.cs
как компонент скрипта в GameObjectYTGameWrapper
. Если в вашем проекте несколько сцен, обязательно добавьте
DontDestroyOnLoad
в скриптYTGameWrapper.cs
(примечание: в новых версиях скрипта есть переключательDontDestroyOnSceneChange
, который по умолчанию включён). Это обеспечит сохранение скрипта и GameObject на протяжении всей игры.GameObject.DontDestroyOnLoad(this.gameObject);
Компонент
YTGameWrapper.cs
и игровой объектYTGameWrapper
используются для подключения к YouTube Playables SDK. Используйте их для подключения к YouTube. Вы можете найти объект и компонент с помощью скрипта или вручную добавить их в код игры через редактор Unity.Убедитесь, что вы соблюдаете технические требования вашего проекта.
Используйте свой собственный файл index.html
Если вы не используете предоставленный пример index.html
, вам потребуется добавить две строки кода в скрипт создания index.html
Unity.
Сначала добавьте эту строку в то же место, где ваш проект настраивает переменные для контейнера Unity, холста и т. д.
var container = document.querySelector("#unity-container");
var canvas = document.querySelector("#unity-canvas");
var unityGameInstance = null; // <-- Add this line >
...
Во-вторых, внутри функции createUnityInstance
добавьте эту строку.
createUnityInstance(canvas, config, (progress) => {
progressBarFull.style.width = 100 * progress + "%";
}).then((unityInstance) => {
unityGameInstance = unityInstance; // <-- Add this line >
...
Примеры
В этом разделе приведены примеры использования C#-обёртки, но это не полный список доступных API. Полный список доступных API см. в YouTube Playables SDK .
sendScore
В этом примере показана реализация sendScore(int points)
на языке C#:
...
using YTGameSDK;
...
public YTGameWrapper ytGameWrapper;
public int battleScore = 0;
...
// Update the total score and send this to the YouTube Game Wrapper.
public void UpdateScores(int scoreAmt)
{
battleScore += scoreAmt;
// ytGameWrapper should be a reference to your YTGameWrapper component.
ytGameWrapper.SendGameScore(battleScore);
}
onPause
Это пример того, как игра может прослушивать события Pause
, поступающие от YT Playables, чтобы при необходимости приостановить свой движок:
...
using YTGameSDK;
...
public YTGameWrapper ytGameWrapper;
public bool gameIsPaused = false;
...
void Start()
{
// Sets the OnPause callback with the YT Playables SDK
ytGameWrapper.SetOnPauseCallback(PauseTheGameCallback);
}
// Pause game callback, will pause the game when called.
public void PauseTheGameCallback()
{
gameIsPaused = true;
}
saveData
Это пример того, как использовать saveData
и отправлять его в YT Playables SDK:
...
using YTGameSDK;
...
public YTGameWrapper ytGameWrapper;
...
// Saves the current score of the game and converts it to a JSON format.
public void SaveScore(int scoreAmt)
{
SaveGameData("{\"BestScore\": \"" + scoreAmt.ToString() + "\"}");
}
public void SaveGameData(string saveString)
{
if (string.IsNullOrEmpty(saveString)) return;
// Sends save data to the YT Playables SDK
ytGameWrapper.SendGameSaveData(saveString);
}
loadData
Вот пример того, как использовать loadData
и отправлять его в YT Playables SDK:
...
using UnityEngine;
using YTGameSDK;
...
[Serializable]
public class LoadedScores
{
public int BestScore;
public float BestTime;
}
public YTGameWrapper ytGameWrapper;
...
void Start()
{
ytGameWrapper.LoadGameSaveData(LoadSaveGameDataReturned);
}
public void LoadSaveGameDataReturned(string data)
{
if (!string.IsNullOrEmpty(data))
{
LoadedScores loadedScores = JsonUtility.FromJson<LoadedScores>(data);
Debug.Log("LoadSaveGameDataReturned > Score <" + loadedScores.BestScore.ToString()
+ "> Time <" + loadedScores.BestTime.ToString("0.00"));
}
}
requestInterstitialAd
Это пример использования requestInterstitialAd
, указывающего на подходящее время для показа полноэкранной рекламы, если она доступна. Для достижения наилучших результатов выполняйте этот вызов во время перерыва в игре, например, в конце уровня.
...
using YTGameSDK;
...
public YTGameWrapper ytGameWrapper;
...
// At the end of a round send a request to show an interstitial Ad, if one is
// available an Ad will be shown and Pause Game Callback should be called.
// EXAMPLE: send and forget
public void RequestInterstitialAd()
{
ytGameWrapper.RequestInterstitialAd();
}
// EXAMPLE: send and react to if an Ad was shown
public void RequestInterstitialAd()
{
int status = ytGameWrapper.RequestInterstitialAd();
if (status == 0)
{
// Ad request was successful, do some action.
}
}
Как использовать пример шаблона WebGL от YouTube
Если у вас не очень тяжёлый проект Unity, ваши собранные файлы .wasm
и .data
не должны превышать установленного нами индивидуального ограничения на размер файла . В этом случае вам не нужно дополнительно сжимать эти файлы, так как они будут автоматически сжаты при отправке ваших воспроизводимых файлов. Это автоматическое сжатие также проверит, соответствует ли ваш файл .wasm требованиям к размеру исходного пакета . Например, файл .wasm
размером около 25 МБ будет сжат до около 7 МБ.
Если по какой-либо причине размер ваших файлов превышает максимально допустимый размер, рекомендуется использовать сжатие ZIP, чтобы убедиться, что они укладываются в это ограничение. Воспроизводимое сжатие не будет повторно сжимать такие файлы.
Шаблон WebGL
- Для первоначальной настройки следуйте инструкциям по установке пакета Unity, приведенным выше . Используйте
Google-WebGLTemplate-only.unitypackage
илиGoogleYTGameWrapper-with-sample.unitypackage
и импортируйте все файлы в папкуWebGLTemplates/YTGameWrapperTemplate/
.- Примечание: если вы еще не импортировали
YTGameWrapper.cs
иUnityYTGameSDKLib.jslib
, вам следует импортировать их также.
- Примечание: если вы еще не импортировали
- Настройте шаблон WebGL на использование
YTGameWrapperTemplate
. Эта настройка находится вEdit
->Project settings
->Player
-> вкладкаWebGL
-> разделResolution and Presentation
.- Примечание: ширина и высота холста по умолчанию в шаблоне установлены на 100%, поэтому эти настройки Unity ничего не изменят.
- Убедитесь, что для
Compression Format
установлено значение «Отключено». Эта настройка находится вProject settings
->Player
-> вкладкаWebGL
-> разделPublishing Settings
. - Выполните сборку для
WebGL
в окнеBuild Settings
затем перейдите к шагу 7 или 5 в зависимости от потребностей вашего проекта. - Выполняйте шаги 5 и 6 только при использовании сжатия : после сборки проекта перейдите в папку сборки и откройте
Build
. Найдите файлы.wasm
или.data
, которые необходимо сжать, чтобы уложиться в ограничения по размеру, и упакуйте их в zip-архив. Обязательно удалите исходные сжатые файлы.wasm
/.data
, так как вместо них вы будете отправлять файлы*.wasm.zip
и*.data.zip
.- Примечание: на Mac можно щелкнуть правой кнопкой мыши по файлу и выбрать «Сжать *». На ПК можно щелкнуть правой кнопкой мыши по файлу и выбрать «Сжать в ZIP-файл».
- Выполняйте только в том случае, если вы выполнили шаг 5 : обновите файл
index.html
, созданный изYTGameWrapperTemplate
, чтобы загрузить сжатые файлы и распаковать их.- Ближе к концу файлов
index.html
вы найдётеPath 1
и закомментируйте следующую строкуInitUnitySection();
;. - Ближе к концу файлов
index.html
вы найдётеPath 2
и закомментируйте следующую строкуloadResources(InitUnitySection);
.
- Ближе к концу файлов
- При отправке проекта на сертификацию вам необходимо отправить все файлы, созданные в Unity, в папку сборки, начиная с шага 4. Если вы выполнили шаги 5 и 6, включите также и эти файлы.
Обновите предоставленные примеры для использования Universal Render Pipeline (URP)
Одним из последних нововведений новых версий Unity является использование Universal Render Pipeline (URP). Это позволяет обновить пример и добиться корректного рендеринга.
- Начните с импорта пакета
GoogleYTGameWrapper-with-sample.unitypackage
в новый или существующий проект. - Перейдите в окно
Render Pipeline Converter
:Window
->Rendering
->Render Pipeline Converter
. - Выберите
Rendering Settings
,Material Upgrade
иReadonly Material Converter
. - Затем выберите
Initialize and Convert
, дождитесь завершения процесса, и образец будет готов для URP.
Как разбить ресурсы в проекте Unity (ленивая загрузка)
Одной из основных проблем, на которые обратили внимание разработчики при использовании Unity, является соблюдение требований к размеру отдельных файлов и требований к общему размеру пакета .
Ленивая загрузка ресурсов — отличная оптимизация для вашего проекта, поскольку вы можете загружать ресурсы, уровни и данные по мере необходимости. Наша команда по сертификации может снять ограничения на общий размер файла, если всё сделано правильно, поскольку полная версия игры будет загружена не заранее, а по мере того, как пользователь перемещается по продукту.
Для обеспечения корректной загрузки Unity предлагает несколько способов разделения ресурсов, проверяя, не превышают ли отдельные группы ресурсов ограничения по размеру и загружается ли контент постепенно. Мы рекомендуем использовать адресуемые ресурсы (Addressables) или пакеты ресурсов (Asset Bundles).
Адреса
Адресные объекты позволяют вам определить различные файлы, которые следует загружать вместе, и Unity возьмёт на себя большую часть работы по упаковке. Unity также предоставляет инструменты для управления размерами файлов и помогает избежать дублирования ресурсов.
Чтобы использовать Addressables, вам необходимо импортировать пакет Addressables через менеджер пакетов Unity, а затем добавить свои ресурсы в группы Addressable. Подробнее см. в документации Unity .
Пакеты активов
Пакеты ресурсов полезны, поскольку позволяют разделить проект и загружать элементы «на лету». Они полезны для DLC, пакетов уровней, новых персонажей и многого другого. Пакеты ресурсов отлично подходят для самостоятельной загрузки и объединения контента. Их можно использовать, добавляя ресурсы в определённые пакеты и загружая их по мере необходимости. Подробнее см. в документации по пакету ресурсов Unity .
См. полный справочник по API YT Playables .