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
WebGL
olarak belirlendiğini doğrulayın. Bu ayarBuild Settings
bölümünde yer alır. - Web için oyununuzu oluşturmak üzere
WebGLTemplate
aracını kullanın veya Kendi index.html dosyanızı kullanın bölümündeki talimatları uygulayıpindex.html
dosyanızda web SDK'sını kurup ilk kullanıma hazırladığınızı doğrulayın.WebGLTemplate
,Google-WebGLTemplate-only.unitypackage
veyaGoogleYTGameWrapper-with-sample.unitypackage
paketinde bulunabilir. Bu şablonu ayarlamak ve kullanmak için WebGL Şablonu bölümündeki adımları uygulayın.- Kendi Web ve
index.html
dosyanızı kullanmak içinindex.html
Unity 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
YTGameWrapper
olarak adlandırın. Bu oyun nesnesi, JS köprüsüyle iletişim kurmak için kullanılır. - ÖNEMLİ: İçe aktarılan
YTGameWrapper.cs
kodunu,YTGameWrapper
GameObject'e bir komut dosyası bileşeni olarak ekleyin. Projenizde birden fazla sahne varsa
DontDestroyOnLoad
simgesiniYTGameWrapper.cs
komut dosyasına eklediğinizden emin olun (Not: Komut dosyasının yeni sürümlerinde varsayılan olarak açık olan birDontDestroyOnSceneChange
açma/kapatma düğmesi bulunur). Bu sayede, komut dosyası ve GameObject'in oyununuz boyunca kalması sağlanır.GameObject.DontDestroyOnLoad(this.gameObject);
YTGameWrapper.cs
bileşeni veYTGameWrapper
GameObject, 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.unitypackage
veyaGoogleYTGameWrapper-with-sample.unitypackage
kullanıp tüm dosyalarıWebGLTemplates/YTGameWrapperTemplate/
klasörüne aktardığınızdan emin olun.- Not:
YTGameWrapper.cs
veUnityYTGameSDKLib.jslib
öğelerini henüz içe aktarmadıysanız bunları da içe aktarmanız gerekir.
- Not:
- WebGL şablonunuzu
YTGameWrapperTemplate
kullanacak şekilde ayarlayın. Bu ayar,Edit
->Project settings
->Player
->WebGL
sekmesi ->Resolution and Presentation
bö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 Format
ayarının Devre Dışı olarak ayarlandığından emin olun. Bu ayar,Project settings
->Player
->WebGL
sekmesi ->Publishing Settings
bölümünde yer alır.Build Settings
penceresindeWebGL
iç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
Build
klasörünü açın. Tek tek dosya boyutu sınırlarına uymak için sıkıştırılması gereken.wasm
veya.data
dosyalarınızı bulun ve bu dosyaları sıkıştırın.*.wasm.zip
ve*.data.zip
dosyalarını göndereceğiniz için sıkıştırılan orijinal.wasm
/.data
dosyaları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.html
dosyasını güncelleyin.index.html
dosyalarının sonuna doğruPath 1
ifadesini bulup aşağıdaki satırdaInitUnitySection();
yorum satırı oluşturun.index.html
dosyalarının sonuna doğruPath 2
ifadesini 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.unitypackage
paketini yeni veya mevcut bir projeye aktararak başlayın.Render Pipeline Converter
penceresine gidin:Window
->Rendering
->Render Pipeline Converter
.Rendering Settings
,Material Upgrade
veReadonly Material Converter
'yi seçin.- Ardından
Initialize and Convert
seç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.