با این لفاف می توانید به SDK YouTube Playables در Unity C# دسترسی داشته باشید. wrapper دارای یک پلاگین jslib. و یک فایل C# برای کمک به سرعت بخشیدن به توسعه شما است. همچنین یک پروژه نمونه وجود دارد که نشان می دهد چگونه می توانید از آنها در پروژه خود استفاده کنید.
بسته های Unity را می توان از مخزن نمونه Playables ما دانلود کرد.
استفاده
- بررسی کنید که پلتفرم پروژه Unity شما روی
WebGL
تنظیم شده است. این تنظیمات درBuild Settings
یافت می شود. - یا از
WebGLTemplate
برای ساخت بازی خود برای وب استفاده کنید، یا بخش Use your own index.html فایل را دنبال کنید و تأیید کنید که وب SDK را در فایلindex.html
خود تنظیم و مقداردهی اولیه کنید.-
WebGLTemplate
می توان در بستهGoogle-WebGLTemplate-only.unitypackage
یاGoogleYTGameWrapper-with-sample.unitypackage
پیدا کرد. برای تنظیم و استفاده از این الگو مراحل موجود در بخش WebGL Template را دنبال کنید. - برای استفاده از فایل Web و
index.html
خود، باید دو خط به اسکریپت ایجادindex.html
خود اضافه کنید.
-
- پروژه خود را در یونیتی باز کنید، سپس هر بسته را باز کرده و به پروژه خود وارد کنید.
-
GoogleYTGameWrapper.unitypackage
: حاوی افزونه JS برای اتصال YouTube Playables SDK و یک پوشش C# برای کمک به اتصال آن به محصول شما. -
GoogleYTGameWrapper-with-sample.unitypackage
: حاوی همان محتوای فایلهایی است که در بسته GoogleYTGameWrapper یافت میشود و نمونهای که نحوه استفاده از YouTube Playables SDK در C# را نشان میدهد.
-
- مهم: در صحنه اصلی خود یک Gameobject جدید ایجاد کنید و نام آن را
YTGameWrapper
بگذارید. این شی بازی برای برقراری ارتباط با پل JS استفاده می شود. - مهم: کد
YTGameWrapper.cs
وارد شده را به عنوان یک جزء اسکریپت بهYTGameWrapper
GameObject اضافه کنید. اگر پروژه شما دارای چندین صحنه است، حتما
DontDestroyOnLoad
به اسکریپتYTGameWrapper.cs
اضافه کنید (توجه: نسخه های جدید اسکریپت دارای یک کلیدDontDestroyOnSceneChange
هستند که به طور پیش فرض روشن است). این اطمینان حاصل می کند که اسکریپت و GameObject در سراسر بازی شما می چسبد.GameObject.DontDestroyOnLoad(this.gameObject);
مؤلفه
YTGameWrapper.cs
وYTGameWrapper
GameObject برای اتصال به YouTube Playables SDK استفاده می شود. از اینها برای اتصال به YouTube استفاده کنید. یا از اسکریپت برای یافتن شی و مؤلفه استفاده کنید یا به صورت دستی از طریق ویرایشگر Unity به کد بازی خود اضافه کنید.بررسی کنید که الزامات فنی پروژه خود را رعایت می کنید.
از فایل index.html خود استفاده کنید
اگر از مثال index.html
ارائه شده استفاده نمی کنید، باید دو خط کد به اسکریپت ایجاد index.html
خود اضافه کنید.
ابتدا این خط را در همان جایی که پروژه شما متغیرهایی را برای Unity Container، Canvas و غیره تنظیم می کند، اضافه کنید.
var container = document.querySelector("#unity-container");
var canvas = document.querySelector("#unity-canvas");
var unityGameInstance = null; // <-- Add this line >
...
دوم، داخل تابع createUnityInstance
این خط را اضافه کنید.
createUnityInstance(canvas, config, (progress) => {
progressBarFull.style.width = 100 * progress + "%";
}).then((unityInstance) => {
unityGameInstance = unityInstance; // <-- Add this line >
...
نمونه ها
این بخش چند نمونه از نحوه استفاده از بسته بندی C# را ارائه می دهد، این لیست کامل API های موجود نیست. برای فهرست کامل APIهای موجود، به YouTube Playables SDK مراجعه کنید.
sendScore
این مثال پیاده سازی sendScore(int points)
در سی شارپ را نشان می دهد:
...
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
این مثالی است از اینکه چگونه یک بازی میتواند به رویدادهای Pause
که از YT Playables میآیند گوش دهد تا در صورت نیاز موتور خود را متوقف کند:
...
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
، ارسال آن به 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
این نمونه ای از نحوه استفاده از loadData
، ارسال آن به 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
این نمونهای از نحوه استفاده از requestInterstitialAd
است، که نشان میدهد در صورت موجود بودن، زمان مناسبی برای نمایش یک آگهی بینالمللی است. برای بهترین نتیجه، این تماس را در زمان استراحت در گیم پلی، به عنوان مثال، در پایان یک سطح انجام دهید.
...
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.
}
}
نحوه استفاده از نمونه WebGL قالب YouTube
فایلهای .wasm
و .data
ساختهشده شما باید تحت محدودیت اندازه فایل فردی ما باشند، مگر اینکه پروژه Unity بسیار سنگینی داشته باشید. در این صورت نباید فشرده سازی اضافی در انتهای شما برای این فایل ها انجام شود زیرا با ارسال فایل های قابل پخش شما به طور خودکار فشرده می شوند. این فشرده سازی خودکار همچنین تأیید می کند که فایل .wasm شما با اندازه مورد نیاز اولیه بسته نرم افزاری مطابقت دارد. به عنوان مثال، یک فایل .wasm
~25 MiB به ~7 MiB فشرده می شود.
اگر بنا به دلایلی فایلهای شما بیش از حداکثر حد مجاز اندازه فایل هستند، بهتر است از فشردهسازی ZIP استفاده کنید تا بررسی کنید که با این محدودیت مطابقت دارند. فشرده سازی قابل پخش این فایل ها را دوباره فشرده نمی کند.
قالب WebGL
- دستورالعمل های بسته Unity در بالا را برای راه اندازی اولیه دنبال کنید. مطمئن شوید که از
Google-WebGLTemplate-only.unitypackage
یاGoogleYTGameWrapper-with-sample.unitypackage
استفاده کرده و همه فایلها را در پوشهWebGLTemplates/YTGameWrapperTemplate/
وارد کنید.- توجه: اگر
YTGameWrapper.cs
وUnityYTGameSDKLib.jslib
را قبلا وارد نکرده اید، باید آن ها را نیز وارد کنید.
- توجه: اگر
- قالب WebGL خود را برای استفاده از
YTGameWrapperTemplate
تنظیم کنید. این تنظیمات در قسمتEdit
->Project settings
->Player
->WebGL
tab ->Resolution and Presentation
قرار دارد.- توجه: عرض و ارتفاع پیشفرض Canvas روی 100% در قالب تنظیم شده است، بنابراین این تنظیمات Unity چیزی را تنظیم نمیکنند.
- مطمئن شوید که
Compression Format
شما روی غیرفعال تنظیم شده است. این تنظیم درProject settings
->Player
-> تبWebGL
-> قسمتPublishing Settings
است. - برای
WebGL
در پنجرهBuild Settings
بسازید سپس بر اساس نیاز پروژه خود به مرحله 7 یا 5 بروید. - فقط در صورت استفاده از فشرده سازی مراحل 5 و 6 را دنبال کنید : پس از ساخت پروژه خود به محل پوشه ساخت خود بروید و پوشه
Build
باز کنید. فایلهای.wasm
یا.data
پروژههای خود را که نیاز به فشردهسازی دارند تا با محدودیتهای اندازه فایلهای فردی متناسب شوند را پیدا کنید و این فایلها را فشرده کنید. مطمئن شوید که فایل های اصلی.wasm
/.data
را که فشرده شده اند حذف کنید زیرا به جای آن فایل های*.wasm.zip
و*.data.zip
را ارسال می کنید.- توجه: اگر از مک استفاده می کنید، می توانید روی فایل کلیک راست کرده و "Compress *" را انتخاب کنید. در رایانه شخصی می توانید روی فایل کلیک راست کرده و "Compress to ZIP file" را انتخاب کنید.
- فقط اگر مرحله 5 را انجام داده اید دنبال کنید : فایل
index.html
ساخته شده ازYTGameWrapperTemplate
را برای بارگیری فایل های فشرده و از حالت فشرده خارج کردن آنها به روز کنید.- نزدیک به انتهای فایلهای
index.html
Path 1
پیدا میکنید و در خط زیرInitUnitySection();
. - در نزدیکی انتهای فایلهای
index.html
Path 2
پیدا میکنید و در خط زیرloadResources(InitUnitySection);
.
- نزدیک به انتهای فایلهای
- هنگام ارسال پروژه خود برای صدور گواهینامه، باید تمام فایل های ساخته شده از Unity را از مرحله 4 به محل ساخت خود ارسال کنید. اگر مراحل 5 + 6 دنبال شدند، این فایل ها را نیز وارد کنید.
نمونه های ارائه شده را برای استفاده از خط لوله رندر جهانی (URP) ارتقا دهید
یکی از آخرین پیشرفتها در نسخههای جدیدتر Unity این است که از خط لوله رندر جهانی (URP) استفاده میکنند. برای ارتقای نمونه تا همه چیز به درستی ارائه شود.
- با وارد کردن بسته
GoogleYTGameWrapper-with-sample.unitypackage
به یک پروژه جدید یا موجود شروع کنید. - به پنجره
Render Pipeline Converter
بروید:Window
->Rendering
->Render Pipeline Converter
. -
Rendering Settings
،Material Upgrade
وReadonly Material Converter
انتخاب کنید. - سپس
Initialize and Convert
را انتخاب کنید، منتظر بمانید تا تمام شود و نمونه باید برای URP آماده شود.
چگونه دارایی ها را در پروژه یونیتی خود تقسیم کنید (بارگذاری تنبل)
یکی از اصلیترین مشکلاتی که توسعهدهندگان در هنگام استفاده از Unity بر آن تاکید کردهاند این است که تحت شرایط مورد نیاز اندازه فایل فردی و نیازهای اندازه کل بسته نرم افزاری قرار بگیرند.
بارگذاری تنبل دارایی ها یک بهینه سازی عالی است که می توانید برای پروژه خود انجام دهید زیرا می توانید دارایی ها، سطوح و داده ها را در صورت نیاز بارگیری کنید. اگر این کار به درستی انجام شود، ممکن است تیم صدور گواهینامه ما از محدودیت های کلی اندازه فایل چشم پوشی کند، زیرا بازی کامل شما از قبل بارگیری نمی شود، بلکه به عنوان کاربر محصول شما را هدایت می کند.
برای کمک به بارگذاری مناسب، یونیتی راههای مختلفی برای تقسیم داراییهای شما دارد و تأیید میکند که گروههای دارایی فردی شما تحت محدودیتهای اندازه هستند و اینکه محتوا را در طول زمان بارگذاری میکنید. پیشنهاد می کنیم از Addressables یا Asset Bundles استفاده کنید.
آدرس پذیرها
Addressable ها به شما امکان می دهند فایل های مختلفی را که باید با هم بارگذاری شوند شناسایی کنید و Unity بیشتر بسته بندی را برای شما انجام می دهد. یونیتی همچنین ابزارهایی را برای مدیریت اندازه فایلها ارائه میکند و کمک میکند مطمئن شوید که داراییها را کپی نمیکنید.
برای استفاده از Addressables باید بسته Addressables را از طریق Package Manager در Unity وارد کنید و سپس دارایی های خود را در Addressable Groups تگ کنید. جزئیات بیشتر را می توان از طریق اسناد Unity پیدا کرد.
بسته های دارایی
بستههای دارایی مفید هستند زیرا میتوانید پروژه خود را تقسیم کنید و عناصر را در لحظه بارگذاری کنید. این ها برای DLC، بسته های سطوح، شخصیت های جدید و موارد دیگر مفید هستند. بستههای دارایی برای بارگیری و بستهبندی محتوای خود مدیریت شده عالی هستند. اینها را می توان با برچسب گذاری دارایی های خود در بسته های خاص، سپس بارگیری بسته ها در صورت نیاز استفاده کرد. جزئیات بیشتر را میتوانید در مستندات Unity's Asset Bundle بیابید.
مرجع کامل API YT Playables را ببینید.