Bu sarmalayıcıyla Unity C#'ta YouTube Hazır Oyunlar SDK'sına erişebilirsiniz. Sarmalayıcıda, geliştirme sürecinizi hızlandırmaya yardımcı olacak bir .jslib eklentisi ve bir C# dosyası bulunur. Ayrıca, bunları projenizde nasıl kullanabileceğinizi gösteren örnek bir proje de vardır.
Unity paketleri, Hazır Oyunlar örnek depomuzdan indirilebilir.
Kullanım
- Unity projenizin Platform ayarının
WebGLolarak belirlendiğini doğrulayın. Bu ayarBuild Settingsbölümünde bulunur. - Web için oyununuzu oluşturmak üzere
WebGLTemplatekullanın veya Kendi index.html dosyanızı kullanın bölümündeki talimatları uygulayın veindex.htmldosyanızda web SDK'sını kurup başlattığınızı doğrulayın.WebGLTemplate,Google-WebGLTemplate-only.unitypackageveyaGoogleYTGameWrapper-with-sample.unitypackagepaketinde bulunabilir. Bu şablonu ayarlamak ve kullanmak için WebGL Şablonu bölümündeki adımları uygulayın.- Kendi Web ve
index.htmldosyanızı kullanmak içinindex.htmlUnity oluşturma komut dosyanıza iki satır eklemeniz gerekir. Entegrasyon için Kendi index.html dosyanızı kullanma bölümüne bakın.
- Projenizi Unity'de açın, ardından paketlerden birini açıp projenize aktarın.
GoogleYTGameWrapper.unitypackage: YouTube Hazır Oyunlar SDK'sını bağlamak için JS eklentisi ve bunu ürününüze bağlamanıza yardımcı olacak bir C# sarmalayıcı içerir.GoogleYTGameWrapper-with-sample.unitypackage: GoogleYTGameWrapper paketinde bulunan dosyalarla aynı dosyaları ve C# dilinde YouTube Hazır Oyunlar SDK'sının nasıl kullanılacağını gösteren bir örneği içerir.
- ÖNEMLİ: Ana sahnenizde yeni bir oyun nesnesi oluşturun ve bu nesneyi
YTGameWrapperolarak adlandırın. Bu oyun nesnesi, JS köprüsüyle iletişim kurmak için kullanılır. - ÖNEMLİ: İçe aktarılan
YTGameWrapper.cskodunu,YTGameWrapperGameObject'e bir komut dosyası bileşeni olarak ekleyin. Projenizde birden fazla sahne varsa
DontDestroyOnLoadsimgesiniYTGameWrapper.cskomut dosyasına eklediğinizden emin olun (Not: Komut dosyasının yeni sürümlerinde varsayılan olarak etkin olan birDontDestroyOnSceneChangeaçma/kapatma düğmesi bulunur). Bu, komut dosyasının ve GameObject'in oyununuz boyunca kalmasını sağlar.GameObject.DontDestroyOnLoad(this.gameObject);YTGameWrapper.csbileşeni veYTGameWrapperGameObject, YouTube Hazır Oyunlar SDK'sına bağlanmak için kullanılır. YouTube'a bağlanmak için bunları kullanın. Nesneyi ve bileşeni bulmak için komut dosyası kullanabilir veya bunları Unity Düzenleyici aracılığıyla oyun kodunuza manuel olarak ekleyebilirsiniz.Projeniz için teknik koşullara uyduğunuzu doğrulayın.
Kendi index.html dosyanızı kullanma
index.html örneğini kullanmıyorsanız index.html Unity oluşturma komut dosyanıza iki satır kod eklemeniz gerekir.
Öncelikle bu satırı, projenizin Unity kapsayıcısı, tuval vb. için değişkenleri ayarladığı yere ekleyin.
var container = document.querySelector("#unity-container");
var canvas = document.querySelector("#unity-canvas");
var unityGameInstance = null; // <-- Add this line >
...
İkinci olarak, createUnityInstance işlevinin içine şu satırı ekleyin.
createUnityInstance(canvas, config, (progress) => {
progressBarFull.style.width = 100 * progress + "%";
}).then((unityInstance) => {
unityGameInstance = unityInstance; // <-- Add this line >
...
Örnekler
Bu bölümde, C# sarmalayıcısının nasıl kullanılacağına dair bazı örnekler verilmiştir. Bu örnekler, mevcut API'lerin tam listesi değildir. Kullanılabilen API'lerin tam listesi için YouTube Hazır Oyunlar SDK'sına bakın.
sendScore
Bu örnekte, C# dilinde sendScore(int points) uygulaması gösterilmektedir:
...
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
Aşağıda, bir oyunun gerektiğinde motorunu duraklatmak için YT Playables'den gelen Pause etkinliklerini nasıl dinleyebileceğine dair bir örnek verilmiştir:
...
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
saveData öğesini YT Playables SDK'sına göndermek için nasıl kullanacağınızla ilgili bir örnek:
...
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
loadData öğesini YT Playables SDK'sına göndermek için nasıl kullanacağınızla ilgili bir örnek:
...
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
Bu, requestInterstitialAd kullanımına ilişkin bir örnektir. Bu örnek, varsa geçiş reklamı göstermek için uygun bir zaman olduğunu belirtir. En iyi sonuçlar için bu aramayı oyun sırasında bir ara verdiğinizde (ör. bir bölümün sonunda) yapın.
...
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
Bu, requestRewardedAd kullanımına ilişkin bir örnektir. Bu, bir kullanıcı oyununuzda ödül karşılığında ödüllü reklam görüntülemeyi seçtiğinde kullanılır. Reklam varsa kullanıcıya gösterilir.
...
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
}
});
}
YouTube'un örnek WebGL şablonunu kullanma
Çok büyük bir Unity projeniz yoksa oluşturduğunuz .wasm ve .data dosyaları, dosya boyutu sınırımız içinde olmalıdır. Bu durumda, oynanabilir dosyalarınızı gönderdiğinizde otomatik olarak sıkıştırılacakları için bu dosyalar için sizin tarafınızdan ek sıkıştırma işlemi yapılmamalıdır. Bu otomatik sıkıştırma işlemi, .wasm dosyanızın ilk paket boyutu şartına uygun olup olmadığını da doğrular. Örneğin, ~25 MiB boyutundaki bir .wasm dosyası ~7 MiB boyutuna sıkıştırılır.
Dosyalarınızın herhangi bir nedenle maksimum dosya boyutu sınırını aştığını düşünüyorsanız bu sınıra uyduklarını doğrulamak için ZIP sıkıştırması kullanmanız önerilir. Oynatılabilir sıkıştırma, bu dosyaları yeniden sıkıştırmaz.
WebGL Şablonu
- İlk kurulum için yukarıdaki Unity paketi talimatlarını uygulayın.
Google-WebGLTemplate-only.unitypackageveyaGoogleYTGameWrapper-with-sample.unitypackagekullanıpWebGLTemplates/YTGameWrapperTemplate/klasöründeki tüm dosyaları içe aktardığınızdan emin olun.- Not:
YTGameWrapper.csveUnityYTGameSDKLib.jsliböğelerini henüz içe aktarmadıysanız bunları da içe aktarmanız gerekir.
- Not:
- WebGL şablonunuzu
YTGameWrapperTemplatekullanacak şekilde ayarlayın. Bu ayar,Edit->Project settings->Player->WebGLsekmesi ->Resolution and Presentationbölümünde yer alır.- Not: Varsayılan tuval genişliği ve yüksekliği şablonda% 100 olarak ayarlandığından bu Unity ayarları herhangi bir şeyi düzenlemez.
Compression Formatayarının devre dışı olarak ayarlandığından emin olun. Bu ayar,Project settings->Player->WebGLsekmesi ->Publishing Settingsbölümünde yer alır.Build SettingspenceresindeWebGLiçin derleme yapın, ardından projelerinizin ihtiyaçlarına göre 7. veya 5. adıma gidin.- Yalnızca sıkıştırma kullanılıyorsa 5. ve 6. adımları uygulayın: Projeniz oluşturulduktan sonra derleme klasörünüzün konumuna gidin ve
Buildklasörünü açın. Her bir dosya boyutu sınırına uymak için sıkıştırılması gereken.wasmveya.datadosyalarınızı bulun ve bu dosyaları sıkıştırın.*.wasm.zipve*.data.zipdosyalarını göndereceğiniz için sıkıştırılmış orijinal.wasm/.datadosyalarını sildiğinizden emin olun.- Not: Mac kullanıyorsanız dosyayı sağ tıklayıp "* sıkıştır"ı seçebilirsiniz. PC'de ise dosyayı sağ tıklayıp "ZIP dosyasına sıkıştır"ı seçebilirsiniz.
- Yalnızca 5. adımı uyguladıysanız devam edin: Sıkıştırılmış dosyaları yüklemek ve bunları açmak için
YTGameWrapperTemplate'dan oluşturulanindex.htmldosyasını güncelleyin.index.htmldosyalarının sonuna doğruPath 1ifadesini bulup aşağıdaki satırdaInitUnitySection();yorum satırı oluşturun.index.htmldosyalarının sonuna doğruPath 2ifadesini bulup aşağıdaki satırdaloadResources(InitUnitySection);yorum satırı oluşturun.
- Projenizi sertifikalandırma için gönderirken Unity'de oluşturulan tüm dosyaları 4. adımda belirtilen derleme konumunuza göndermeniz gerekir. 5. ve 6. adımlar uygulandıysa bu dosyaları da ekleyin.
Universal Render Pipeline'ı (URP) kullanmak için sağlanan örnekleri yükseltin
Unity'nin yeni sürümlerindeki en son gelişmelerden biri, Universal Render Pipeline (URP) kullanmalarıdır. Her şeyin doğru şekilde oluşturulması için örneği yükseltin.
GoogleYTGameWrapper-with-sample.unitypackagepaketini yeni veya mevcut bir projeye aktararak başlayın.Render Pipeline Converterpenceresine gidin:Window->Rendering->Render Pipeline Converter.Rendering Settings,Material UpgradeveReadonly Material Converter'yi seçin.- Ardından
Initialize and Convertseçeneğini belirleyin, işlemin tamamlanmasını bekleyin. Örnek, URP için hazır olmalıdır.
Unity projenizdeki öğeleri bölme (Lazy Loading)
Geliştiricilerin Unity'yi kullanırken vurguladığı temel sorunlardan biri, tek tek dosya boyutu şartlarına ve toplam paket boyutu şartlarına uymaktır.
Öğelerin geç yüklenmesi, öğeleri, seviyeleri ve verileri gerektiğinde yükleyebileceğiniz için projeniz için yapabileceğiniz harika bir optimizasyondur. Tam oyununuz önceden yüklenmeyeceği, kullanıcı ürününüzde gezinirken yükleneceği için sertifika ekibimiz, bu işlem doğru şekilde yapıldığında genel dosya boyutu kısıtlamalarını kaldırabilir.
Unity, öğelerinizi düzgün bir şekilde yüklemenize yardımcı olmak için çeşitli yöntemler sunar. Bu yöntemler, tek tek öğe gruplarınızın boyut sınırlarının altında olduğunu ve içeriği zaman içinde yüklediğinizi doğrular. Addressables veya Asset Bundles'ı kullanmanızı öneririz.
Addressables
Addressables, birlikte yüklenmesi gereken farklı dosyaları tanımlamanıza olanak tanır ve Unity, paketleme işlemlerinin çoğunu sizin için halleder. Unity ayrıca dosya boyutlarını yönetmek ve öğeleri kopyalamadığınızdan emin olmanıza yardımcı olmak için bazı araçlar sunar.
Addressables'ı kullanmak için Unity'deki Paket Yöneticisi aracılığıyla Addressables paketini içe aktarmanız ve ardından öğelerinizi Addressable Grupları'na etiketlemeniz gerekir. Daha fazla bilgi için Unity belgelerine göz atın.
Öğe paketleri
Projenizi bölüp öğeleri anında yükleyebildiğiniz için öğe paketleri faydalıdır. Bu bilgiler; indirilebilir içerikler, seviye paketleri, yeni karakterler ve daha fazlası için faydalıdır. Öğe paketleri, kendi kendine yönetilen içerik yükleme ve paketleme için idealdir. Öğelerinizi belirli paketlere etiketleyip paketleri gerektiğinde yükleyerek bu özelliklerden yararlanabilirsiniz. Daha fazla bilgiyi Unity'nin Asset Bundle belgelerinde bulabilirsiniz.
YT Playables API referansının tamamına bakın.