Dengan wrapper ini, Anda dapat mengakses YouTube Playables SDK di Unity C#. Wrapper memiliki plugin .jslib dan file C# untuk membantu mempercepat pengembangan Anda. Ada juga project contoh yang menunjukkan cara menggunakannya di project Anda.
Paket Unity dapat didownload dari repo contoh Playables kami.
Penggunaan
- Pastikan Platform project Unity Anda disetel ke
WebGL. Setelan ini dapat ditemukan diBuild Settings. - Gunakan
WebGLTemplateuntuk membuat game Anda untuk web, atau ikuti bagian Menggunakan file index.html Anda sendiri dan pastikan Anda telah menyiapkan dan melakukan inisialisasi SDK web di fileindex.htmlAnda.WebGLTemplatedapat ditemukan dalam paketGoogle-WebGLTemplate-only.unitypackageatauGoogleYTGameWrapper-with-sample.unitypackage. Untuk menyiapkan dan menggunakan template ini, ikuti langkah-langkah di bagian Template WebGL.- Untuk menggunakan file Web dan
index.htmlAnda sendiri, Anda harus menambahkan dua baris ke skrip pembuatan Unityindex.html, lihat Menggunakan file index.html Anda sendiri bagian 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 seperti yang ditemukan dalam paket GoogleYTGameWrapper dan contoh yang menunjukkan cara menggunakan YouTube Playables SDK di C#.
- PENTING: Di scene utama, buat gameobject baru dan beri nama
YTGameWrapper. Objek game ini digunakan untuk berkomunikasi dengan jembatan JS. - PENTING: Tambahkan kode
YTGameWrapper.csyang diimpor sebagai komponen skrip ke GameObjectYTGameWrapper. Jika project Anda memiliki beberapa scene, pastikan untuk menambahkan
DontDestroyOnLoadke skripYTGameWrapper.cs(catatan: versi baru skrip memiliki tombolDontDestroyOnSceneChangeyang diaktifkan secara default). Hal ini akan memastikan skrip dan GameObject tetap ada di seluruh game Anda.GameObject.DontDestroyOnLoad(this.gameObject);Komponen
YTGameWrapper.csdan GameObjectYTGameWrapperdigunakan untuk terhubung ke YouTube Playables SDK. Gunakan komponen dan objek ini untuk terhubung ke YouTube. Anda dapat menggunakan Skrip untuk menemukan objek dan komponen atau menambahkannya 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 disediakan, Anda harus menambahkan dua baris kode ke skrip pembuatan Unity index.html Anda.
Pertama, tambahkan baris ini di tempat yang sama dengan tempat project Anda menyiapkan variabel untuk container Unity, kanvas, dll.
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#, tetapi bukan daftar lengkap API yang tersedia. Untuk daftar lengkap API yang tersedia, lihat ke 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 adalah contoh cara game dapat 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 adalah contoh cara menggunakan saveData, dan 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 adalah contoh cara menggunakan loadData, dan 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 mendapatkan hasil terbaik, lakukan panggilan ini selama jeda dalam 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.
}
}
requestRewardedAd
Berikut adalah contoh cara menggunakan requestRewardedAd. Fungsi ini digunakan saat pengguna memilih untuk melihat Iklan reward sebagai imbalan atas reward tertentu dalam game Anda. Jika Iklan tersedia, iklan akan ditampilkan kepada pengguna.
...
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
}
});
}
Cara menggunakan Template WebGL contoh YouTube
Kecuali jika Anda memiliki project Unity yang sangat besar, file .wasm dan .data yang Anda buat
harus berada di bawah batas ukuran file individual kami. Jika demikian, tidak ada kompresi tambahan yang perlu dilakukan di pihak Anda untuk file ini karena file tersebut akan otomatis dikompresi saat pengiriman file Playable Anda.
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 Playable tidak akan mengompresi ulang file ini.
Template WebGL
- Ikuti petunjuk paket Unity di atas untuk penyiapan awal.
Pastikan untuk menggunakan
Google-WebGLTemplate-only.unitypackageatauGoogleYTGameWrapper-with-sample.unitypackagedan mengimpor semua file di folderWebGLTemplates/YTGameWrapperTemplate/.- Catatan: jika Anda belum mengimpor
YTGameWrapper.csdanUnityYTGameSDKLib.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 FormatAnda disetel ke Nonaktif. Setelan ini ada diProject settings->Player-> tabWebGL-> bagianPublishing Settings. - Buat untuk
WebGLdi jendelaBuild Settings, lalu buka langkah 7 atau 5 berdasarkan kebutuhan project Anda. - Hanya ikuti langkah 5 &6 jika kompresi digunakan: Setelah project Anda dibuat, buka lokasi folder build Anda dan buka folder
Build. Temukan file.wasmatau.dataproject Anda yang memerlukan kompresi agar sesuai dengan batas ukuran file individual dan gabungkan file ini ke dalam file ZIP. Pastikan untuk menghapus file.wasm/.dataasli yang dikompresi karena Anda akan mengirimkan file*.wasm.zipdan*.data.zipsebagai gantinya.- 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 melakukan langkah 5: Perbarui file
index.htmlyang dibuat dariYTGameWrapperTemplateuntuk memuat file yang di-zip dan mengekstraknya.- Di dekat akhir file
index.html, Anda akan menemukanPath 1dan mengomentari baris berikutInitUnitySection();. - Di dekat akhir file
index.html, Anda akan menemukanPath 2dan mengomentari baris berikutloadResources(InitUnitySection);.
- Di dekat akhir file
- Saat mengirimkan project Anda untuk Sertifikasi, Anda harus mengirimkan semua file yang dibuat dari Unity ke lokasi build Anda dari Langkah 4. Jika langkah 5 + 6 diikuti, sertakan juga file ini.
Mengupgrade contoh yang disediakan untuk menggunakan Universal Render Pipeline (URP)
Salah satu kemajuan terbaru dengan versi Unity yang lebih baru adalah bahwa versi tersebut menggunakan Universal Render Pipeline (URP). Untuk mengupgrade contoh sehingga semuanya dirender dengan benar.
- Mulai dengan mengimpor paket
GoogleYTGameWrapper-with-sample.unitypackageke 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 contohnya akan siap untuk URP.
Cara membagi aset di project Unity Anda (Pemuatan Lambat)
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 lambat aset adalah pengoptimalan yang bagus yang dapat Anda lakukan untuk project Anda karena Anda dapat memuat aset, level, dan data sesuai kebutuhan. Tim sertifikasi kami dapat mengabaikan batasan ukuran file 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 beberapa cara untuk membagi 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 menandai aset Anda ke dalam Addressable Groups. Detail selengkapnya dapat ditemukan melalui dokumentasi Unity.
Asset Bundles
Asset Bundles berguna karena Anda dapat membagi project dan memuat elemen dengan cepat. Hal ini berguna untuk DLC, paket level, karakter baru, dan lainnya. Asset Bundles sangat bagus untuk pemuatan dan penggabungan konten yang dikelola sendiri. Hal ini dapat digunakan dengan menandai aset Anda ke dalam paket tertentu, lalu memuat paket sesuai kebutuhan. Detail selengkapnya dapat ditemukan dalam dokumentasi Asset Bundle Unity.
Lihat referensi YT Playables API lengkap.