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. Außerdem gibt es 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
WebGLfestgelegt ist. Diese Einstellung finden Sie unterBuild Settings(Build-Einstellungen). - Verwenden Sie entweder
WebGLTemplate, um Ihr Spiel für das Web zu erstellen, oder folgen Sie der Anleitung im Abschnitt Eigene index.html-Datei verwenden und prüfen Sie, ob Sie das Web SDK eingerichtet und initialisiert haben in Ihrerindex.htmlDatei.WebGLTemplatefinden Sie im PaketGoogle-WebGLTemplate-only.unitypackageoderGoogleYTGameWrapper-with-sample.unitypackage. Informationen zum Einrichten und Verwenden dieser Vorlage finden Sie im Abschnitt WebGL-Vorlage.- Wenn Sie Ihre eigene Web- und
index.html-Datei verwenden möchten, müssen Sie Ihremindex.html-Erstellungsskript für Unity zwei Zeilen hinzufügen. Weitere Informationen finden Sie im Abschnitt Eigene index.html-Datei verwenden für die Integration.
- Öffnen Sie Ihr Projekt in Unity und importieren Sie dann eines der beiden Pakete in Ihr Projekt.
GoogleYTGameWrapper.unitypackage: Enthält ein 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, das zeigt, wie Sie das YouTube Playables SDK in C# verwenden.
- WICHTIG:Erstellen Sie in Ihrer Hauptszene ein neues Spielobjekt und nennen Sie es
YTGameWrapper. Dieses Spielobjekt wird für die Kommunikation mit der JS-Bridge verwendet. - WICHTIG: Fügen Sie den importierten
YTGameWrapper.csCode als Skript komponente zumYTGameWrapperSpielobjekt hinzu. Wenn Ihr Projekt mehrere Szenen hat, fügen Sie dem
YTGameWrapper.cs-SkriptDontDestroyOnLoadhinzu. Hinweis: Neue Versionen des Skripts haben eineDontDestroyOnSceneChange-Umschaltfläche, die standardmäßig aktiviert ist. So bleibt das Skript und das Spielobjekt während des gesamten Spiels erhalten.GameObject.DontDestroyOnLoad(this.gameObject);Die
YTGameWrapper.cs-Komponente und dasYTGameWrapper-Spielobjekt werden verwendet, um eine Verbindung zum YouTube Playables SDK herzustellen. Verwenden Sie sie, um eine Verbindung zu YouTube herzustellen. Sie können das Objekt und die Komponente entweder mit einem Skript suchen oder sie manuell über den Unity-Editor zu Ihrem Spielcode hinzufügen.Prüfen Sie, ob Sie die technischen Anforderungen für Ihr Projekt erfüllen.
Eigene index.html-Datei verwenden
Wenn Sie nicht das bereitgestellte index.html-Beispiel verwenden, müssen Sie Ihrem index.html-Erstellungsskript für Unity zwei Codezeilen hinzufügen.
Fügen Sie zuerst diese Zeile an derselben Stelle hinzu, an der Ihr Projekt Variablen für den Unity-Container, die Canvas usw. einrichtet.
var container = document.querySelector("#unity-container");
var canvas = document.querySelector("#unity-canvas");
var unityGameInstance = null; // <-- Add this line >
...
Fügen Sie dann diese Zeile in die Funktion createUnityInstance ein.
createUnityInstance(canvas, config, (progress) => {
progressBarFull.style.width = 100 * progress + "%";
}).then((unityInstance) => {
unityGameInstance = unityInstance; // <-- Add this line >
...
Beispiele
In diesem Abschnitt finden Sie einige Beispiele für die Verwendung des C#-Wrappers. Dies ist keine vollständige Liste der verfügbaren APIs. Die vollständige Liste der verfügbaren APIs finden Sie im YouTube Playables SDK.
sendScore
Dieses Beispiel zeigt eine Implementierung von sendScore(int points) in 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
Dieses Beispiel zeigt, wie ein Spiel auf Pause-Ereignisse von YouTube 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
Dieses Beispiel zeigt, wie Sie saveData verwenden und an das YouTube Playables SDK senden:
...
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
Dieses Beispiel zeigt, wie Sie loadData verwenden und an das YouTube Playables SDK senden:
...
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
Dieses Beispiel zeigt, wie Sie requestInterstitialAd verwenden, um anzugeben, dass es ein guter Zeitpunkt ist, eine Interstitial-Anzeige zu präsentieren, falls verfügbar. Die besten Ergebnisse erzielen Sie, wenn Sie diesen Aufruf während einer Pause im Spiel ausführen, 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.
}
}
requestRewardedAd
Dieses Beispiel zeigt, wie Sie requestRewardedAd verwenden. Diese Funktion wird verwendet, wenn ein Nutzer sich entschieden hat, sich eine Anzeige mit Prämie anzusehen, um eine Belohnung in Ihrem Spiel zu erhalten. Wenn eine Anzeige verfügbar ist, wird sie dem Nutzer präsentiert.
...
using YTGameSDK;
...
public YTGameWrapper ytGameWrapper;
...
public void RequestRewardedAd()
{
// Register callback for Rewarded Ads. If an Ad is available one will be
// shown. Pause Game Callback should be called. Any ID is fine as long as
// its identifyable for your game.
ytGameWrapper.RequestRewardedAd("my-reward-ad-id-123", (rewardEarned) => {
if (rewardEarned) {
// Rewarded Ad is earned, reward the user.
} else {
// Rewarded Ad not earned, take the appropriate action
}
});
}
Beispiel-WebGL-Vorlage von YouTube verwenden
Sofern Sie kein sehr umfangreiches Unity-Projekt haben, sollten Ihre erstellten .wasm und .data Dateien
unter dem Limit für die individuelle Dateigröße liegen. In diesem Fall ist keine zusätzliche Komprimierung dieser Dateien erforderlich, da sie beim Einreichen Ihrer Playable-Dateien automatisch komprimiert werden.
Bei dieser automatischen Komprimierung wird auch geprüft, ob Ihre ` .wasm`-Datei die
Anforderungen an die anfängliche Bundle-Größe erfüllt. Beispiel: Eine .wasm-Datei mit einer Größe von etwa 25 MB wird auf etwa 7 MB komprimiert.
Wenn Ihre Dateien aus irgendeinem Grund das Limit für die maximale individuelle Dateigröße überschreiten, sollten Sie die ZIP-Komprimierung verwenden, um zu prüfen, ob sie dieses Limit einhalten. Die Playable-Komprimierung komprimiert diese Dateien nicht noch einmal.
WebGL-Vorlage
- Folgen Sie der Anleitung für das Unity-Paket oben, um die anfängliche Einrichtung vorzunehmen.
Verwenden Sie
Google-WebGLTemplate-only.unitypackageoderGoogleYTGameWrapper-with-sample.unitypackageund importieren Sie alle Dateien im OrdnerWebGLTemplates/YTGameWrapperTemplate/.- Hinweis: Wenn Sie
YTGameWrapper.csundUnityYTGameSDKLib.jslibnoch nicht importiert haben, sollten Sie das jetzt tun.
- Hinweis: Wenn Sie
- Legen Sie für Ihre WebGL-Vorlage
YTGameWrapperTemplatefest. Diese Einstellung finden Sie unterEdit(Bearbeiten) >Project settings(Projekteinstellungen) >Player(Player) > TabWebGL> AbschnittResolution and Presentation(Auflösung und Präsentation).- Hinweis: Die Standardbreite und ‑höhe der Canvas sind in der Vorlage auf 100% festgelegt. Diese Unity-Einstellungen haben also keine Auswirkungen.
- Achten Sie darauf, dass
Compression Format(Komprimierungsformat) auf „Disabled“ (Deaktiviert) festgelegt ist. Diese Einstellung finden Sie unterProject settings(Projekteinstellungen) >Player(Player) > TabWebGL> AbschnittPublishing Settings(Veröffentlichungseinstellungen). - Erstellen Sie im Fenster
Build Settings(Build-Einstellungen) einen Build fürWebGLund fahren Sie dann je nach Bedarf Ihres Projekts mit Schritt 7 oder 5 fort. - Führen Sie die Schritte 5 und 6 nur aus, wenn eine Komprimierung verwendet wird: Nachdem Ihr Projekt erstellt wurde, rufen Sie den Speicherort Ihres Build-Ordners auf und öffnen Sie den Ordner
Build. Suchen Sie die.wasm- oder.data-Dateien Ihres Projekts, die komprimiert werden müssen, um die Limits für die individuelle Dateigröße einzuhalten, und komprimieren Sie diese Dateien. Löschen Sie die ursprünglichen.wasm/.data-Dateien, die komprimiert wurden, da Sie stattdessen die Dateien*.wasm.zipund*.data.zipeinreichen.- 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 „Komprimieren zu ZIP-Datei“ auswählen.
- Führen Sie diesen Schritt nur aus, wenn Sie Schritt 5 ausgeführt haben: Aktualisieren Sie die
index.html-Datei, die ausYTGameWrapperTemplateerstellt wurde, um ZIP-Dateien zu laden und zu dekomprimieren.- Suchen Sie am Ende der
index.html-Dateien nachPath 1und kommentieren Sie die folgende Zeile aus:InitUnitySection();. - Suchen Sie am Ende der
index.html-Dateien nachPath 2und kommentieren Sie die folgende Zeile aus:loadResources(InitUnitySection);.
- Suchen Sie am Ende der
- Wenn Sie Ihr Projekt zur Zertifizierung einreichen, müssen Sie alle aus Unity erstellten Dateien an den Build-Speicherort aus Schritt 4 senden. Wenn Sie die Schritte 5 und 6 ausgeführt haben, fügen Sie auch diese Dateien hinzu.
Bereitgestellte Beispiele für die Verwendung der Universal Render Pipeline (URP) aktualisieren
Eine der neuesten Entwicklungen bei neueren Versionen von Unity ist die Verwendung der Universal Render Pipeline (URP). So aktualisieren Sie das Beispiel, damit alles korrekt gerendert wird:
- Importieren Sie zuerst das Paket
GoogleYTGameWrapper-with-sample.unitypackagein ein neues oder vorhandenes Projekt. - Rufen Sie das Fenster
Render Pipeline Converterauf:Window(Fenster) >Rendering(Rendering) >Render Pipeline Converter. - Wählen Sie
Rendering Settings(Rendering-Einstellungen),Material Upgrade(Material-Upgrade) undReadonly Material Converter(Converter für schreibgeschützte Materialien) aus. - Wählen Sie dann
Initialize and Convert(Initialisieren und konvertieren) aus. Warten Sie, bis der Vorgang abgeschlossen ist. Das Beispiel sollte jetzt 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 individuelle Dateigröße und die Gesamtgröße des Bundles.
Das Lazy Loading von Assets ist eine gute Optimierung für Ihr Projekt, da Sie Assets, Levels und Daten nach Bedarf laden können. Unser Zertifizierungsteam verzichtet möglicherweise auf die Beschränkungen der Gesamtdateigröße, wenn dies ordnungsgemäß erfolgt, da Ihr vollständiges Spiel nicht im Voraus geladen wird, sondern erst, wenn ein Nutzer Ihr Produkt verwendet.
Um das ordnungsgemäße Laden zu erleichtern, bietet Unity verschiedene Möglichkeiten, Ihre Assets aufzuteilen. So können Sie prüfen, ob Ihre einzelnen Asset-Gruppen die Größenlimits einhalten und dass 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 dann 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 Package Manager in Unity importieren und dann Ihre Assets in 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 nützlich für DLCs, Level-Pakete, neue Charaktere und mehr. Asset-Bundles eignen sich hervorragend für das selbstverwaltete Laden und Bündeln von Inhalten. Sie können verwendet werden, indem Sie Ihre Assets in bestimmten Bundles taggen und dann Bundles nach Bedarf laden. Weitere Informationen finden Sie in der Unity-Dokumentation zu Asset-Bundles.
Vollständige YT Playables API-Referenz