Bu sarmalayıcıyla Unity C#'ta YouTube Hazır Oyunlar SDK'sına erişebilirsiniz. Sarmalayıcı, geliştirme sürecinizi hızlandırmak için bir .jslib eklentisi ve bir C# dosyası içerir. Ayrıca, bunları projenizde nasıl kullanabileceğinizi gösteren bir örnek 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 yer alır. - Web için oyununuzu oluşturmak üzere
WebGLTemplatearacını kullanın veya Kendi index.html dosyanızı kullanın bölümündeki talimatları uygulayıpindex.htmldosyanızda web SDK'sını kurup ilk kullanıma hazırladığı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 GameObject oluşturun ve bunu
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 açık olan birDontDestroyOnSceneChangeaçma/kapatma düğmesi bulunur). Bu sayede, komut dosyası ve GameObject'in oyununuz boyunca kalması sağlanır.GameObject.DontDestroyOnLoad(this.gameObject);YTGameWrapper.csbileşeni veYTGameWrapperGameObject, YouTube Playables 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 kod satırı 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ılabilir API'lerin tam listesi için YouTube Playables 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
Bu, saveData öğesini YT Playables SDK'sına göndermek için nasıl kullanacağınızla ilgili bir örnektir:
...
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
Bu, loadData öğesini YT Playables SDK'sına göndermek için nasıl kullanacağınızla ilgili bir örnektir:
...
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 öğesinin nasıl kullanılacağına dair bir örnektir. Bu öğe, 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.
}
}
YouTube'un örnek WebGL şablonunu kullanma
Çok büyük bir Unity projeniz yoksa oluşturduğunuz .wasm ve .data dosyaları, tek tek dosya boyutu sınırımızın altında olmalıdır. Bu durumda, oynanabilir dosyalarınız gönderildiğinde otomatik olarak sıkıştırılacağından, 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'lik bir .wasm dosya ~7 MiB'a sıkıştırılır.
Dosyalarınız herhangi bir nedenle maksimum dosya boyutu sınırını aşıyorsa 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ıp tüm dosyalarıWebGLTemplates/YTGameWrapperTemplate/klasörüne 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 derleyin, ardından projelerinizin ihtiyaçlarına bağlı olarak 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. Tek tek dosya boyutu sınırları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ılan 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öğesinden 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.
Evrensel Oluşturma İşlem Hattı'nı (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, bu 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, projeniz için yapabileceğiniz harika bir optimizasyondur. Bu sayede öğeleri, seviyeleri ve verileri gerektiğinde yükleyebilirsiniz. Sertifika ekibimiz, bu işlem doğru şekilde yapıldığı takdirde genel dosya boyutu kısıtlamalarını kaldırabilir. Bunun nedeni, tam oyununuzun önceden değil, kullanıcı ürününüzde gezinirken yüklenmesidir.
Unity, öğelerin düzgün şekilde yüklenmesine yardımcı olmak için öğelerinizi bölmenin çeşitli yollarını sunar. Bu yollar arasında, bağımsız öğe gruplarınızın boyut sınırlarının altında olduğunu doğrulama ve içeriği zaman içinde yükleme yer alır. Addressables veya Asset Bundles'ı kullanmanızı öneririz.
Addressables
Addressables, birlikte yüklenmesi gereken farklı dosyaları tanımlamanıza olanak tanır ve Unity, paketlemenin büyük bir kısmını sizin için halleder. Unity ayrıca dosya boyutlarını yönetmenize ve öğeleri kopyalamadığınızdan emin olmanıza yardımcı olacak bazı araçlar da sunar.
Addressables'ı kullanmak için Addressables paketini Unity'deki Paket Yöneticisi aracılığıyla içe aktarmanız ve ardından öğelerinizi Addressables 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 kaynaklar; indirilebilir içerikler, seviye paketleri, yeni karakterler ve daha fazlası için yararlı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.