Mit diesem Wrapper können Sie in Unity C# auf das YouTube Playables SDK zugreifen. Der Wrapper enthält ein .jslib-Plug-in und eine C#-Datei, um die Entwicklung zu beschleunigen. Es gibt auch ein Beispielprojekt, das zeigt, wie Sie diese in Ihrem Projekt verwenden können.
Unity-Pakete können aus unserem Playables-Beispiel-Repository heruntergeladen werden.
Nutzung
- Prüfen Sie, ob die Plattform Ihres Unity-Projekts auf
WebGL
festgelegt ist. Diese Einstellung finden Sie unterBuild Settings
. - Entweder Sie verwenden
WebGLTemplate
, um Ihr Spiel für das Web zu erstellen, oder Sie folgen dem Abschnitt Eigene index.html-Datei verwenden und prüfen, ob Sie das Web-SDK in Ihrerindex.html
-Datei eingerichtet und initialisiert haben.WebGLTemplate
befindet sich im PaketGoogle-WebGLTemplate-only.unitypackage
oderGoogleYTGameWrapper-with-sample.unitypackage
. Folgen Sie den Schritten im Abschnitt WebGL-Vorlage, um diese Vorlage einzurichten und zu verwenden.- Wenn Sie Ihre eigene Web- und
index.html
-Datei verwenden möchten, müssen Sie Ihremindex.html
-Unity-Erstellungsskript zwei Zeilen hinzufügen. Weitere Informationen zur Integration finden Sie im Abschnitt Eigene index.html-Datei verwenden.
- Öffnen Sie Ihr Projekt in Unity und importieren Sie dann eines der beiden Pakete in Ihr Projekt.
GoogleYTGameWrapper.unitypackage
: Enthält das JS-Plug-in zum Verbinden des YouTube Playables SDK und einen C#-Wrapper, um die Verbindung zu Ihrem Produkt zu erleichtern.GoogleYTGameWrapper-with-sample.unitypackage
: Enthält dieselben Dateien wie das GoogleYTGameWrapper-Paket und ein Beispiel für die Verwendung des YouTube Playables SDK in C#.
- WICHTIG:Erstelle in deiner Hauptszene ein neues GameObject und gib ihm den Namen
YTGameWrapper
. Dieses Spielobjekt wird für die Kommunikation mit der JS-Bridge verwendet. - WICHTIG:Fügen Sie den importierten
YTGameWrapper.cs
-Code als Skriptkomponente zumYTGameWrapper
-GameObject hinzu. Wenn Ihr Projekt mehrere Szenen hat, fügen Sie
DontDestroyOnLoad
in dasYTGameWrapper.cs
-Script ein. Hinweis: In neuen Versionen des Scripts ist dieDontDestroyOnSceneChange
-Schaltfläche standardmäßig aktiviert. So wird sichergestellt, dass das Skript und das GameObject während des gesamten Spiels erhalten bleiben.GameObject.DontDestroyOnLoad(this.gameObject);
Die Komponente
YTGameWrapper.cs
und das GameObjectYTGameWrapper
werden verwendet, um eine Verbindung zum YouTube Playables SDK herzustellen. Damit können Sie eine Verbindung zu YouTube herstellen. Entweder Sie verwenden ein Skript, um das Objekt und die Komponente zu finden, oder Sie fügen sie manuell über den Unity-Editor in Ihren Spielcode ein.Prüfen Sie, ob Sie die technischen Anforderungen für Ihr Projekt erfüllen.
Eigene index.html-Datei verwenden
Wenn Sie das bereitgestellte index.html
-Beispiel nicht verwenden, müssen Sie Ihrem index.html
-Unity-Erstellungsskript zwei Codezeilen hinzufügen.
Fügen Sie diese Zeile zuerst an derselben Stelle ein, an der in Ihrem Projekt Variablen für den Unity-Container, das Canvas usw. eingerichtet werden.
var container = document.querySelector("#unity-container");
var canvas = document.querySelector("#unity-canvas");
var unityGameInstance = null; // <-- Add this line >
...
Fügen Sie als Nächstes diese Zeile in die Funktion createUnityInstance
ein.
createUnityInstance(canvas, config, (progress) => {
progressBarFull.style.width = 100 * progress + "%";
}).then((unityInstance) => {
unityGameInstance = unityInstance; // <-- Add this line >
...
Beispiele
Dieser Abschnitt enthält einige Beispiele für die Verwendung des C#-Wrappers. Es handelt sich dabei nicht um die vollständige Liste der verfügbaren APIs. Eine vollständige Liste der verfügbaren APIs finden Sie im YouTube Playables SDK.
sendScore
In diesem Beispiel wird die Implementierung von sendScore(int points)
in C# gezeigt:
...
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
Hier sehen Sie ein Beispiel dafür, wie ein Spiel auf Pause
-Ereignisse von YT Playables reagieren kann, um die Engine bei Bedarf zu pausieren:
...
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
Hier ist ein Beispiel für die Verwendung von saveData
, das an das YT Playables SDK gesendet wird:
...
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
Hier ist ein Beispiel für die Verwendung von loadData
, das an das YT Playables SDK gesendet wird:
...
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
Dies ist ein Beispiel für die Verwendung von requestInterstitialAd
. Es wird angegeben, dass es ein guter Zeitpunkt ist, eine Interstitial-Anzeige einzublenden, sofern verfügbar. Die besten Ergebnisse erzielst du, wenn du diesen Aufruf während einer Spielpause ausführst, z. B. am Ende eines Levels.
...
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.
}
}
Beispiel-WebGL-Vorlage von YouTube verwenden
Sofern Sie kein sehr umfangreiches Unity-Projekt haben, sollten die erstellten Dateien .wasm
und .data
unter dem Dateigrößenlimit liegen. In diesem Fall sollten Sie diese Dateien nicht zusätzlich komprimieren, da sie beim Einreichen Ihrer Playable-Dateien automatisch komprimiert werden.
Durch diese automatische Komprimierung wird auch geprüft, ob Ihre .wasm-Datei die Anforderung an die anfängliche Bundle-Größe erfüllt. Eine .wasm
-Datei mit einer Größe von etwa 25 MiB wird beispielsweise auf etwa 7 MiB komprimiert.
Wenn Ihre Dateien aus irgendeinem Grund die maximale Dateigröße überschreiten, sollten Sie sie mit ZIP komprimieren, um sicherzugehen, dass sie innerhalb dieses Limits liegen. Bei der komprimierten Wiedergabe werden diese Dateien nicht neu komprimiert.
WebGL-Vorlage
- Folgen Sie der Anleitung für das Unity-Paket oben für die Ersteinrichtung.
Verwenden Sie
Google-WebGLTemplate-only.unitypackage
oderGoogleYTGameWrapper-with-sample.unitypackage
und importieren Sie alle Dateien im OrdnerWebGLTemplates/YTGameWrapperTemplate/
.- Hinweis: Wenn Sie
YTGameWrapper.cs
undUnityYTGameSDKLib.jslib
noch nicht importiert haben, sollten Sie das jetzt nachholen.
- Hinweis: Wenn Sie
- Legen Sie fest, dass Ihre WebGL-Vorlage
YTGameWrapperTemplate
verwenden soll. Diese Einstellung befindet sich unterEdit
->Project settings
->Player
-> TabWebGL
-> BereichResolution and Presentation
.- Hinweis: Die Standardbreite und ‑höhe des Canvas sind in der Vorlage auf 100% festgelegt. Diese Unity-Einstellungen haben also keine Auswirkungen.
- Achte darauf, dass
Compression Format
auf „Deaktiviert“ eingestellt ist. Diese Einstellung befindet sich unterProject settings
->Player
-> TabWebGL
-> BereichPublishing Settings
. - Erstellen Sie
WebGL
im FensterBuild Settings
und fahren Sie dann je nach den Anforderungen Ihres Projekts mit Schritt 7 oder 5 fort. - Führen Sie nur die Schritte 5 und 6 aus, wenn die Komprimierung verwendet wird: Nachdem Ihr Projekt erstellt wurde, rufen Sie den Speicherort des Build-Ordners auf und öffnen Sie den Ordner
Build
. Suchen Sie die.wasm
- oder.data
-Dateien Ihrer Projekte, die komprimiert werden müssen, um die jeweiligen Dateigrößenlimits einzuhalten, und zippen Sie diese Dateien. Löschen Sie die Originaldateien.wasm
/.data
, die komprimiert wurden, da Sie stattdessen die Dateien*.wasm.zip
und*.data.zip
einreichen.- Hinweis: Wenn Sie einen Mac verwenden, können Sie mit der rechten Maustaste auf die Datei klicken und „* komprimieren“ auswählen. Auf einem PC können Sie mit der rechten Maustaste auf die Datei klicken und „In ZIP-Datei komprimieren“ auswählen.
- Nur ausführen, wenn Sie Schritt 5 ausgeführt haben: Aktualisieren Sie die
index.html
-Datei, die ausYTGameWrapperTemplate
erstellt wurde, um gezippte Dateien zu laden und zu dekomprimieren.- Suchen Sie in den
index.html
-Dateien am Ende nachPath 1
und kommentieren Sie die folgende Zeile aus:InitUnitySection();
. - Suchen Sie in den
index.html
-Dateien am Ende nachPath 2
und kommentieren Sie die folgende Zeile aus:loadResources(InitUnitySection);
.
- Suchen Sie in den
- Wenn Sie Ihr Projekt zur Zertifizierung einreichen, müssen Sie alle Dateien, die in Unity erstellt wurden, an den Build-Speicherort aus Schritt 4 senden. Wenn die Schritte 5 und 6 ausgeführt wurden, fügen Sie diese Dateien ebenfalls hinzu.
Stellen Sie die bereitgestellten Beispiele auf die Universal Render Pipeline (URP) um.
Einer der neuesten Fortschritte bei neueren Versionen von Unity ist die Verwendung der Universal Render Pipeline (URP). Um das Beispiel zu aktualisieren, damit alles korrekt gerendert wird.
- Importieren Sie zuerst das
GoogleYTGameWrapper-with-sample.unitypackage
-Paket in ein neues oder vorhandenes Projekt. - Rufen Sie das Fenster
Render Pipeline Converter
auf:Window
->Rendering
->Render Pipeline Converter
. - Wählen Sie
Rendering Settings
,Material Upgrade
undReadonly Material Converter
aus. - Wählen Sie dann
Initialize and Convert
aus. Warten Sie, bis der Vorgang abgeschlossen ist. Das Sample sollte dann für URP bereit sein.
Assets in Ihrem Unity-Projekt aufteilen (Lazy Loading)
Eines der Hauptprobleme, die Entwickler bei der Verwendung von Unity angesprochen haben, ist die Einhaltung der Anforderungen an die Dateigröße und die Bundle-Größe.
Das verzögerte Laden von Assets ist eine hervorragende Optimierung für Ihr Projekt, da Sie Assets, Ebenen und Daten nach Bedarf laden können. Unser Zertifizierungsteam kann die Beschränkungen für die Gesamtdateigröße aufheben, wenn dies ordnungsgemäß erfolgt, da Ihr vollständiges Spiel nicht im Voraus geladen wird, sondern erst, wenn ein Nutzer Ihr Produkt verwendet.
Damit das Laden reibungslos funktioniert, bietet Unity verschiedene Möglichkeiten, Ihre Assets aufzuteilen. So können Sie dafür sorgen, dass Ihre einzelnen Asset-Gruppen die Größenbeschränkungen einhalten und Inhalte im Laufe der Zeit geladen werden. Wir empfehlen, entweder Addressables oder Asset Bundles zu verwenden.
Addressables
Mit Addressables können Sie verschiedene Dateien identifizieren, die zusammen geladen werden sollen. Unity übernimmt den Großteil der Paketierung für Sie. Unity bietet auch einige Tools zum Verwalten von Dateigrößen und zum Vermeiden von doppelten Assets.
Wenn Sie Addressables verwenden möchten, müssen Sie das Addressables-Paket über den Paket-Manager in Unity importieren und Ihre Assets dann mit Addressable Groups taggen. Weitere Informationen finden Sie in der Unity-Dokumentation.
Asset-Bundles
Asset-Bundles sind hilfreich, da Sie Ihr Projekt aufteilen und Elemente spontan laden können. Sie sind hilfreich für DLCs, Levelpakete, neue Charaktere und mehr. Asset-Bundles eignen sich hervorragend für das selbstverwaltete Laden und Bündeln von Inhalten. Sie können sie verwenden, indem Sie Ihre Assets mit bestimmten Bundles taggen und dann Bundles nach Bedarf laden. Weitere Informationen finden Sie in der Dokumentation zu Asset Bundles von Unity.