Ten wrapper umożliwia dostęp do pakietu SDK Pokoju gier w YouTube w Unity C#. Zawiera on wtyczkę .jslib i plik C#, które przyspieszają proces tworzenia. Dostępny jest też przykładowy projekt, który pokazuje, jak można ich używać w swoim projekcie.
Pakiety Unity można pobrać z naszego repozytorium z przykładowymi grami.
Wykorzystanie
- Sprawdź, czy platforma projektu Unity jest ustawiona na
WebGL. To ustawienie znajdziesz wBuild Settings. - Użyj ikony
WebGLTemplate, aby utworzyć grę na potrzeby internetu, lub postępuj zgodnie z instrukcjami w sekcji Używanie własnego pliku index.html i upewnij się, że w plikuindex.htmlmasz skonfigurowany i zainicjowany pakiet SDK na potrzeby internetu.WebGLTemplatemożna znaleźć w pakiecieGoogle-WebGLTemplate-only.unitypackagelubGoogleYTGameWrapper-with-sample.unitypackage. Aby skonfigurować i używać tego szablonu, wykonaj czynności opisane w sekcji Szablon WebGL.- Aby użyć własnego pliku Web i
index.html, musisz dodać 2 wiersze do skryptu tworzeniaindex.htmlw Unity. Informacje o integracji znajdziesz w sekcji Używanie własnego pliku index.html.
- Otwórz projekt w Unity, a następnie otwórz i zaimportuj do niego jeden z pakietów.
GoogleYTGameWrapper.unitypackage: zawiera wtyczkę JS do łączenia pakietu SDK do gier w YouTube i otoczkę C# ułatwiającą połączenie z Twoją usługą.GoogleYTGameWrapper-with-sample.unitypackage: zawiera te same pliki i treści co pakiet GoogleYTGameWrapper oraz przykład pokazujący, jak używać pakietu SDK do gier w YouTube w języku C#.
- WAŻNE: w scenie głównej utwórz nowy obiekt gry i nadaj mu nazwę
YTGameWrapper. Ten obiekt gry służy do komunikacji z mostem JS. - WAŻNE: dodaj zaimportowany kod
YTGameWrapper.csjako komponent skryptu do obiektuYTGameWrapperGameObject. Jeśli Twój projekt ma wiele scen, dodaj
DontDestroyOnLoaddo skryptuYTGameWrapper.cs(uwaga: nowe wersje skryptu mają przełącznikDontDestroyOnSceneChange, który jest domyślnie włączony). Dzięki temu skrypt i obiekt GameObject będą dostępne w całej grze.GameObject.DontDestroyOnLoad(this.gameObject);Komponent
YTGameWrapper.csi obiektYTGameWrapperGameObject służą do łączenia się z pakietem SDK YouTube Playables. Użyj ich, aby połączyć się z YouTube. Możesz użyć skryptu, aby znaleźć obiekt i komponent, lub ręcznie dodać je do kodu gry w edytorze Unity.Sprawdź, czy spełniasz wymagania techniczne dotyczące Twojego projektu.
Używanie własnego pliku index.html
Jeśli nie używasz podanego index.htmlprzykładu, musisz dodać 2 wiersze kodu do index.htmlskryptu tworzenia w Unity.
Najpierw dodaj ten wiersz w tym samym miejscu, w którym projekt konfiguruje zmienne dla kontenera Unity, obszaru roboczego itp.
var container = document.querySelector("#unity-container");
var canvas = document.querySelector("#unity-canvas");
var unityGameInstance = null; // <-- Add this line >
...
Po drugie, w funkcji createUnityInstance dodaj ten wiersz.
createUnityInstance(canvas, config, (progress) => {
progressBarFull.style.width = 100 * progress + "%";
}).then((unityInstance) => {
unityGameInstance = unityInstance; // <-- Add this line >
...
Przykłady
Ta sekcja zawiera przykłady użycia otoki C#. Nie jest to pełna lista dostępnych interfejsów API. Pełną listę dostępnych interfejsów API znajdziesz w pakiecie SDK do gier na YouTube.
sendScore
Ten przykład pokazuje implementację sendScore(int points) w 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
Oto przykład, jak gra może nasłuchiwać zdarzeń Pause pochodzących z YT Playables, aby w razie potrzeby wstrzymać działanie silnika:
...
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
Oto przykład użycia parametru saveData i przesłania go do pakietu SDK do gier na YouTube:
...
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
Oto przykład użycia parametru loadData i przesłania go do pakietu SDK do gier na YouTube:
...
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
To przykład użycia funkcji requestInterstitialAd, która wskazuje, że jeśli jest dostępna reklama pełnoekranowa, to jest to dobry moment na jej wyświetlenie. Aby uzyskać najlepsze wyniki, wywołaj tę funkcję podczas przerwy w grze, np. na końcu poziomu.
...
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.
}
}
Jak korzystać z przykładowego szablonu WebGL w YouTube
Jeśli nie masz bardzo dużego projektu w Unity, utworzone pliki .wasm i .data powinny mieścić się w limicie rozmiaru pliku. W takim przypadku nie należy dodatkowo kompresować tych plików, ponieważ zostaną one automatycznie skompresowane podczas przesyłania plików z reklamą interaktywną.
Automatyczna kompresja sprawdzi też, czy plik .wasm spełnia wymagania dotyczące rozmiaru pakietu początkowego. Na przykład plik o rozmiarze około 25 MB.wasm zostanie skompresowany do około 7 MB.
Jeśli z jakiegoś powodu Twoje pliki przekraczają maksymalny limit rozmiaru pojedynczego pliku, najlepiej użyć kompresji ZIP, aby sprawdzić, czy mieszczą się w tym limicie. Kompresja z możliwością odtwarzania nie spowoduje ponownej kompresji tych plików.
Szablon WebGL
- Aby przeprowadzić konfigurację początkową, postępuj zgodnie z instrukcjami dotyczącymi pakietu Unity podanymi powyżej.
Użyj symbolu
Google-WebGLTemplate-only.unitypackagelubGoogleYTGameWrapper-with-sample.unitypackagei zaimportuj wszystkie pliki z folderuWebGLTemplates/YTGameWrapperTemplate/.- Uwaga: jeśli nie masz jeszcze zaimportowanych
YTGameWrapper.csiUnityYTGameSDKLib.jslib, zaimportuj je również.
- Uwaga: jeśli nie masz jeszcze zaimportowanych
- Ustaw szablon WebGL na
YTGameWrapperTemplate. To ustawienie znajduje się w sekcjiEdit–>Project settings–>Player–> kartaWebGL–> sekcjaResolution and Presentation.- Uwaga: domyślna szerokość i wysokość obszaru roboczego są ustawione w szablonie na 100%, więc te ustawienia Unity nie będą niczego zmieniać.
- Upewnij się, że
Compression Formatjest ustawione na Wyłączone. To ustawienie znajduje się na karcieProject settings–>Player–>WebGLw sekcjiPublishing Settings. - W oknie
Build SettingskliknijWebGL, a potem przejdź do kroku 7 lub 5 w zależności od potrzeb projektu. - Kroki 5 i 6 wykonaj tylko wtedy, gdy używasz kompresji: po utworzeniu projektu przejdź do folderu kompilacji i otwórz folder
Build. Znajdź pliki projektów.wasmlub.data, które musisz skompresować, aby zmieściły się w limitach rozmiaru pliku, i skompresuj je. Pamiętaj, aby usunąć oryginalne pliki.wasm/.data, które zostały skompresowane, ponieważ zamiast nich prześlesz pliki*.wasm.zipi*.data.zip.- Uwaga: jeśli używasz komputera Mac, możesz kliknąć plik prawym przyciskiem myszy i wybrać „Kompresuj *”. Na komputerze PC możesz kliknąć plik prawym przyciskiem myszy i wybrać „Kompresuj do pliku ZIP”.
- Wykonaj tylko wtedy, gdy wykonano krok 5: zaktualizuj plik
index.htmlutworzony na podstawieYTGameWrapperTemplate, aby wczytywać spakowane pliki i je dekompresować.- Pod koniec plików
index.htmlznajdzieszPath 1i zakomentujesz ten wiersz:InitUnitySection();. - Pod koniec plików
index.htmlznajdzieszPath 2i zakomentujesz ten wiersz:loadResources(InitUnitySection);.
- Pod koniec plików
- Podczas przesyłania projektu do certyfikacji musisz wysłać wszystkie pliki utworzone w Unity do lokalizacji kompilacji z kroku 4. Jeśli wykonano kroki 5 i 6, dołącz również te pliki.
Uaktualnij podane przykłady, aby korzystać z uniwersalnego potoku renderowania (URP)
Jednym z najnowszych osiągnięć w nowszych wersjach Unity jest to, że korzystają one z Universal Render Pipeline (URP). Aby ulepszyć próbkę, tak aby wszystko było renderowane prawidłowo.
- Zacznij od zaimportowania pakietu
GoogleYTGameWrapper-with-sample.unitypackagedo nowego lub istniejącego projektu. - Otwórz okno
Render Pipeline Converter:Window->Rendering->Render Pipeline Converter. - Wybierz
Rendering Settings,Material UpgradeiReadonly Material Converter. - Następnie wybierz
Initialize and Convert, poczekaj na zakończenie tego procesu i sprawdź, czy próbka jest gotowa do użycia w URP.
Jak podzielić zasoby w projekcie Unity (leniwe wczytywanie)
Jednym z głównych problemów, na które zwracają uwagę deweloperzy korzystający z Unity, jest utrzymanie rozmiaru pliku poniżej określonego limitu oraz spełnienie wymagań dotyczących łącznego rozmiaru pakietu.
Leniwe wczytywanie zasobów to świetna optymalizacja, którą możesz wprowadzić w projekcie, ponieważ umożliwia wczytywanie zasobów, poziomów i danych w miarę potrzeb. Nasz zespół ds. certyfikacji może odstąpić od ogólnych ograniczeń rozmiaru pliku, jeśli zostanie to prawidłowo wykonane, ponieważ pełna wersja gry nie będzie ładowana z góry, ale w miarę poruszania się użytkownika po produkcie.
Aby ułatwić prawidłowe wczytywanie, Unity oferuje kilka sposobów dzielenia zasobów. Sprawdź, czy poszczególne grupy zasobów nie przekraczają limitów rozmiaru i czy wczytujesz treści z upływem czasu. Zalecamy używanie adresowalnych zasobów lub pakietów zasobów.
Adresowalne
Adresy umożliwiają identyfikowanie różnych plików, które powinny być ładowane razem, a Unity zajmie się większością pakowania. Unity udostępnia też narzędzia do zarządzania rozmiarami plików i zapobiegania duplikowaniu zasobów.
Aby korzystać z Addressables, musisz zaimportować pakiet Addressables za pomocą Menedżera pakietów w Unity, a następnie otagować komponenty w grupach Addressables. Więcej informacji znajdziesz w dokumentacji Unity.
Pakiety zasobów
Pakiety zasobów są przydatne, ponieważ możesz podzielić projekt i ładować elementy w trakcie działania aplikacji. Przydadzą się one w przypadku DLC, pakietów poziomów, nowych postaci i innych elementów. Pakiety zasobów świetnie sprawdzają się w przypadku samodzielnego zarządzania wczytywaniem i grupowaniem treści. Możesz je wykorzystać, tagując komponenty w określonych pakietach, a następnie wczytując pakiety w miarę potrzeb. Więcej informacji znajdziesz w dokumentacji pakietów zasobów Unity.
Zobacz pełną dokumentację interfejsu YT Playables API.