Dengan wrapper ini, Anda dapat mengakses YouTube Playables SDK di Unity C#. Wrapper memiliki plug-in .jslib dan file C# untuk membantu mempercepat pengembangan Anda. Ada juga contoh project yang menunjukkan cara Anda dapat menggunakan ini di project Anda.
Paket Unity dapat didownload dari repositori contoh Ruang Game kami.
Penggunaan
- Pastikan Platform project Unity Anda disetel ke
WebGL
. Setelan ini dapat ditemukan diBuild Settings
. - Gunakan
WebGLTemplate
untuk membangun game Anda untuk web, atau ikuti bagian Gunakan file index.html Anda sendiri dan pastikan Anda telah menyiapkan dan melakukan inisialisasi web SDK di fileindex.html
Anda.WebGLTemplate
dapat ditemukan dalam paketGoogle-WebGLTemplate-only.unitypackage
atauGoogleYTGameWrapper-with-sample.unitypackage
. Untuk menyiapkan dan menggunakan template ini, ikuti langkah-langkah di bagian Template WebGL.- Untuk menggunakan file Web dan
index.html
Anda sendiri, Anda harus menambahkan dua baris ke skrip pembuatan Unityindex.html
, lihat bagian Menggunakan file index.html Anda sendiri untuk integrasi.
- Buka project Anda di Unity, lalu buka dan impor salah satu paket ke project Anda.
GoogleYTGameWrapper.unitypackage
: Berisi Plugin JS untuk menghubungkan YouTube Playables SDK dan wrapper C# untuk membantu menghubungkannya ke produk Anda.GoogleYTGameWrapper-with-sample.unitypackage
: Berisi konten file yang sama dengan yang ada di paket GoogleYTGameWrapper dan contoh yang menunjukkan cara menggunakan YouTube Playables SDK di C#.
- PENTING: Di adegan utama, buat gameobject baru dan beri nama
YTGameWrapper
. Objek game ini digunakan untuk berkomunikasi dengan jembatan JS. - PENTING: Tambahkan kode
YTGameWrapper.cs
yang diimpor sebagai komponen skrip ke GameObjectYTGameWrapper
. Jika project Anda memiliki beberapa adegan, pastikan untuk menambahkan
DontDestroyOnLoad
ke skripYTGameWrapper.cs
(catatan: versi baru skrip memiliki tombolDontDestroyOnSceneChange
yang aktif secara default). Tindakan ini akan memastikan skrip dan GameObject tetap ada di sepanjang game Anda.GameObject.DontDestroyOnLoad(this.gameObject);
Komponen
YTGameWrapper.cs
dan GameObjectYTGameWrapper
digunakan untuk terhubung ke YouTube Playables SDK. Gunakan kredensial ini untuk terhubung ke YouTube. Menggunakan Skrip untuk menemukan objek dan komponen atau menambahkan objek dan komponen ini secara manual ke kode game Anda melalui Unity Editor.Pastikan Anda mengikuti persyaratan teknis untuk project Anda.
Menggunakan file index.html Anda sendiri
Jika Anda tidak menggunakan contoh index.html
yang diberikan, Anda harus menambahkan dua baris kode ke skrip pembuatan index.html
Unity.
Pertama, tambahkan baris ini di tempat yang sama dengan project Anda menyiapkan variabel untuk penampung, kanvas, dll. Unity.
var container = document.querySelector("#unity-container");
var canvas = document.querySelector("#unity-canvas");
var unityGameInstance = null; // <-- Add this line >
...
Kedua, di dalam fungsi createUnityInstance
, tambahkan baris ini.
createUnityInstance(canvas, config, (progress) => {
progressBarFull.style.width = 100 * progress + "%";
}).then((unityInstance) => {
unityGameInstance = unityInstance; // <-- Add this line >
...
Contoh
Bagian ini memiliki beberapa contoh cara menggunakan wrapper C#, bukan daftar lengkap API yang tersedia. Untuk daftar lengkap API yang tersedia, lihat YouTube Playables SDK.
sendScore
Contoh ini menunjukkan penerapan sendScore(int points)
di 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
Berikut contoh cara game memproses peristiwa Pause
yang berasal dari YT Playables, untuk menjeda mesinnya jika diperlukan:
...
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
Berikut contoh cara menggunakan saveData
, mengirimkannya ke 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
Berikut contoh cara menggunakan loadData
, mengirimkannya ke 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
Berikut adalah contoh cara menggunakan requestInterstitialAd
, yang menunjukkan bahwa ini adalah
waktu yang tepat untuk menampilkan Iklan interstisial, jika tersedia. Untuk hasil terbaik, lakukan panggilan ini selama jeda gameplay, misalnya, di akhir level.
...
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.
}
}
Cara menggunakan Template WebGL contoh YouTube
Kecuali jika Anda memiliki project Unity yang sangat berat, file .wasm
dan .data
yang Anda buat harus berada di bawah batas ukuran file masing-masing. Jika
demikian, tidak ada kompresi tambahan yang harus dilakukan di pihak Anda untuk file ini
karena file tersebut akan otomatis dikompresi saat pengiriman file yang Dapat Dimainkan.
Kompresi otomatis ini juga akan memverifikasi bahwa file .wasm Anda sesuai dengan persyaratan ukuran paket awal. Sebagai contoh, file .wasm
berukuran ~25
MiB akan dikompresi menjadi ~7 MiB.
Jika karena alasan tertentu file Anda melebihi batas ukuran file individual maksimum, sebaiknya gunakan kompresi ZIP untuk memverifikasi bahwa file tersebut sesuai dengan batas ini. Kompresi yang dapat diputar tidak akan mengompresi ulang file ini.
Template WebGL
- Ikuti petunjuk paket Unity di atas untuk penyiapan awal.
Pastikan untuk menggunakan
Google-WebGLTemplate-only.unitypackage
atauGoogleYTGameWrapper-with-sample.unitypackage
dan mengimpor semua file di folderWebGLTemplates/YTGameWrapperTemplate/
.- Catatan: jika Anda belum mengimpor
YTGameWrapper.cs
danUnityYTGameSDKLib.jslib
, Anda juga harus mengimpornya.
- Catatan: jika Anda belum mengimpor
- Setel Template WebGL Anda untuk menggunakan
YTGameWrapperTemplate
. Setelan ini ada diEdit
->Project settings
->Player
-> tabWebGL
-> bagianResolution and Presentation
.- Catatan: Lebar dan Tinggi Kanvas Default ditetapkan ke 100% dalam template sehingga setelan Unity ini tidak akan menyesuaikan apa pun.
- Pastikan
Compression Format
Anda disetel ke Nonaktif. Setelan ini ada diProject settings
->Player
-> tabWebGL
-> bagianPublishing Settings
. - Bangun untuk
WebGL
di jendelaBuild Settings
, lalu lanjutkan ke langkah 7 atau 5 berdasarkan kebutuhan project Anda. - Hanya ikuti langkah 5 & 6 jika kompresi digunakan: Setelah project Anda di-build, buka lokasi folder build Anda dan buka folder
Build
. Temukan file.wasm
atau.data
project Anda yang perlu dikompresi agar sesuai dengan batas ukuran file masing-masing dan zip file tersebut. Pastikan untuk menghapus file.wasm
/.data
asli yang dikompresi karena Anda akan mengirimkan file*.wasm.zip
dan*.data.zip
.- Catatan: Jika Anda menggunakan Mac, Anda dapat mengklik kanan file dan memilih "Compress *". Di PC, Anda dapat mengklik kanan file dan memilih "Compress to ZIP file".
- Hanya ikuti jika Anda telah melakukan langkah 5: Perbarui file
index.html
yang dibuat dariYTGameWrapperTemplate
untuk memuat file yang di-zip dan mendekompresinya.- Di dekat akhir file
index.html
, Anda akan menemukanPath 1
dan hapus tanda komentar pada baris berikutInitUnitySection();
. - Di dekat akhir file
index.html
, Anda akan menemukanPath 2
dan hapus tanda komentar pada baris berikutloadResources(InitUnitySection);
.
- Di dekat akhir file
- Saat mengirimkan project untuk mendapatkan Sertifikasi, Anda harus mengirim semua file yang dibuat dari Unity ke lokasi build dari Langkah 4. Jika langkah 5 + 6 telah diikuti, sertakan file ini juga.
Mengupgrade contoh yang diberikan untuk menggunakan Universal Render Pipeline (URP)
Salah satu kemajuan terbaru dengan Unity versi yang lebih baru adalah bahwa Unity menggunakan Universal Render Pipeline (URP). Untuk mengupgrade contoh sehingga semuanya dirender dengan benar.
- Mulai dengan mengimpor paket
GoogleYTGameWrapper-with-sample.unitypackage
ke project baru atau yang sudah ada. - Buka jendela
Render Pipeline Converter
:Window
->Rendering
->Render Pipeline Converter
. - Pilih
Rendering Settings
,Material Upgrade
, danReadonly Material Converter
. - Selanjutnya, pilih
Initialize and Convert
, tunggu hingga selesai, dan sampel akan siap untuk URP.
Cara memecah aset dalam project Unity Anda (Lazy Loading)
Salah satu masalah utama yang disoroti developer saat menggunakan Unity adalah tetap berada di bawah persyaratan ukuran file individual dan persyaratan ukuran paket total.
Pemuatan aset secara lambat adalah pengoptimalan yang sangat baik yang dapat Anda lakukan untuk proyek Anda karena Anda dapat memuat aset, level, dan data sesuai kebutuhan. Tim sertifikasi kami dapat mengabaikan batasan ukuran file secara keseluruhan jika hal ini dilakukan dengan benar, karena game lengkap Anda tidak akan dimuat di awal, tetapi saat pengguna menjelajahi produk Anda.
Untuk membantu pemuatan yang tepat, Unity memiliki sejumlah cara untuk memisahkan aset Anda, memverifikasi bahwa setiap grup aset Anda berada di bawah batas ukuran dan Anda memuat konten dari waktu ke waktu. Sebaiknya gunakan Addressables atau Asset Bundles.
Addressables
Addressables memungkinkan Anda mengidentifikasi berbagai file yang harus dimuat bersama dan Unity akan menangani sebagian besar pengemasan untuk Anda. Unity juga menyediakan beberapa alat untuk mengelola ukuran file dan membantu memastikan Anda tidak menduplikasi aset.
Untuk menggunakan Addressables, Anda harus mengimpor paket Addressables melalui Package Manager di Unity, lalu memberi tag pada aset ke dalam Addressable Groups. Detail selengkapnya dapat ditemukan melalui dokumentasi Unity.
Bundle Aset
Paket Aset berguna karena Anda dapat membagi project dan memuat elemen secara langsung. Hal ini berguna untuk DLC, paket level, karakter baru, dan lainnya. Paket Aset sangat cocok untuk pemuatan dan penggabungan konten yang dikelola sendiri. Hal ini dapat digunakan dengan memberi tag pada aset ke dalam paket tertentu, lalu memuat paket sesuai kebutuhan Anda. Detail selengkapnya dapat ditemukan dalam dokumentasi Paket Aset Unity.
Lihat referensi YT Playables API selengkapnya.