Unity Wrapper آزمایشی YouTube Playables

با این لفاف می توانید به SDK YouTube Playables در Unity C# دسترسی داشته باشید. wrapper دارای یک پلاگین jslib. و یک فایل C# برای کمک به سرعت بخشیدن به توسعه شما است. همچنین یک پروژه نمونه وجود دارد که نشان می دهد چگونه می توانید از آنها در پروژه خود استفاده کنید.

بسته های Unity را می توان از مخزن نمونه Playables ما دانلود کرد.

استفاده

  1. بررسی کنید که پلتفرم پروژه Unity شما روی WebGL تنظیم شده است. این تنظیمات در Build Settings یافت می شود.
  2. یا از 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 خود اضافه کنید.
  3. پروژه خود را در یونیتی باز کنید، سپس هر بسته را باز کرده و به پروژه خود وارد کنید.
    • GoogleYTGameWrapper.unitypackage : حاوی افزونه JS برای اتصال YouTube Playables SDK و یک پوشش C# برای کمک به اتصال آن به محصول شما.
    • GoogleYTGameWrapper-with-sample.unitypackage : حاوی همان محتوای فایل‌هایی است که در بسته GoogleYTGameWrapper یافت می‌شود و نمونه‌ای که نحوه استفاده از YouTube Playables SDK در C# را نشان می‌دهد.
  4. مهم: در صحنه اصلی خود یک Gameobject جدید ایجاد کنید و نام آن را YTGameWrapper بگذارید. این شی بازی برای برقراری ارتباط با پل JS استفاده می شود.
  5. مهم: کد YTGameWrapper.cs وارد شده را به عنوان یک جزء اسکریپت به YTGameWrapper GameObject اضافه کنید.
  6. اگر پروژه شما دارای چندین صحنه است، حتما DontDestroyOnLoad به اسکریپت YTGameWrapper.cs اضافه کنید (توجه: نسخه های جدید اسکریپت دارای یک کلید DontDestroyOnSceneChange هستند که به طور پیش فرض روشن است). این اطمینان حاصل می کند که اسکریپت و GameObject در سراسر بازی شما می چسبد.

    GameObject.DontDestroyOnLoad(this.gameObject);
    
  7. مؤلفه YTGameWrapper.cs و YTGameWrapper GameObject برای اتصال به YouTube Playables SDK استفاده می شود. از اینها برای اتصال به YouTube استفاده کنید. یا از اسکریپت برای یافتن شی و مؤلفه استفاده کنید یا به صورت دستی از طریق ویرایشگر Unity به کد بازی خود اضافه کنید.

  8. بررسی کنید که الزامات فنی پروژه خود را رعایت می کنید.

از فایل 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

  1. دستورالعمل های بسته Unity در بالا را برای راه اندازی اولیه دنبال کنید. مطمئن شوید که از Google-WebGLTemplate-only.unitypackage یا GoogleYTGameWrapper-with-sample.unitypackage استفاده کرده و همه فایل‌ها را در پوشه WebGLTemplates/YTGameWrapperTemplate/ وارد کنید.
    • توجه: اگر YTGameWrapper.cs و UnityYTGameSDKLib.jslib را قبلا وارد نکرده اید، باید آن ها را نیز وارد کنید.
  2. قالب WebGL خود را برای استفاده از YTGameWrapperTemplate تنظیم کنید. این تنظیمات در قسمت Edit -> Project settings -> Player -> WebGL tab -> Resolution and Presentation قرار دارد.
    • توجه: عرض و ارتفاع پیش‌فرض Canvas روی 100% در قالب تنظیم شده است، بنابراین این تنظیمات Unity چیزی را تنظیم نمی‌کنند.
  3. مطمئن شوید که Compression Format شما روی غیرفعال تنظیم شده است. این تنظیم در Project settings -> Player -> تب WebGL -> قسمت Publishing Settings است.
  4. برای WebGL در پنجره Build Settings بسازید سپس بر اساس نیاز پروژه خود به مرحله 7 یا 5 بروید.
  5. فقط در صورت استفاده از فشرده سازی مراحل 5 و 6 را دنبال کنید : پس از ساخت پروژه خود به محل پوشه ساخت خود بروید و پوشه Build باز کنید. فایل‌های .wasm یا .data پروژه‌های خود را که نیاز به فشرده‌سازی دارند تا با محدودیت‌های اندازه فایل‌های فردی متناسب شوند را پیدا کنید و این فایل‌ها را فشرده کنید. مطمئن شوید که فایل های اصلی .wasm / .data را که فشرده شده اند حذف کنید زیرا به جای آن فایل های *.wasm.zip و *.data.zip را ارسال می کنید.
    • توجه: اگر از مک استفاده می کنید، می توانید روی فایل کلیک راست کرده و "Compress *" را انتخاب کنید. در رایانه شخصی می توانید روی فایل کلیک راست کرده و "Compress to ZIP file" را انتخاب کنید.
  6. فقط اگر مرحله 5 را انجام داده اید دنبال کنید : فایل index.html ساخته شده از YTGameWrapperTemplate را برای بارگیری فایل های فشرده و از حالت فشرده خارج کردن آنها به روز کنید.
    • نزدیک به انتهای فایل‌های index.html Path 1 پیدا می‌کنید و در خط زیر InitUnitySection(); .
    • در نزدیکی انتهای فایل‌های index.html Path 2 پیدا می‌کنید و در خط زیر loadResources(InitUnitySection); .
  7. هنگام ارسال پروژه خود برای صدور گواهینامه، باید تمام فایل های ساخته شده از Unity را از مرحله 4 به محل ساخت خود ارسال کنید. اگر مراحل 5 + 6 دنبال شدند، این فایل ها را نیز وارد کنید.

نمونه های ارائه شده را برای استفاده از خط لوله رندر جهانی (URP) ارتقا دهید

یکی از آخرین پیشرفت‌ها در نسخه‌های جدیدتر Unity این است که از خط لوله رندر جهانی (URP) استفاده می‌کنند. برای ارتقای نمونه تا همه چیز به درستی ارائه شود.

  1. با وارد کردن بسته GoogleYTGameWrapper-with-sample.unitypackage به یک پروژه جدید یا موجود شروع کنید.
  2. به پنجره Render Pipeline Converter بروید: Window -> Rendering -> Render Pipeline Converter .
  3. Rendering Settings ، Material Upgrade و Readonly Material Converter انتخاب کنید.
  4. سپس 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 را ببینید.