FPro Sensei
بعد از ایجاد مپینک مورد نظرم من گفتم که بالا تنه کاراکتر تحت تاثیر ریتارگت یونیتی نباشه
نحوه اعمال : بعد از ایجاد و ماسک بروی تنظیمات لایه ریگ کلیک و ماسک خود را اعمال کنید
FPro Sensei
نحوه اعمال : بعد از ایجاد و ماسک بروی تنظیمات لایه ریگ کلیک و ماسک خود را اعمال کنید
مشاهده میکنید که بالا تنه کاراکتر من تحت تاثیر ریتارگت نمیگرد
❤1
FPro Sensei
مشاهده میکنید که بالا تنه کاراکتر من تحت تاثیر ریتارگت نمیگرد
کاربرد avatar masking چیست : مثلا شما یک انیمیشن ریلود کلت داری و یک انیمیشن دویدن کاراکتر میتونید با ایجاد لایه کاری کنید که دویدن فقط توی پا ها اجر باشه و عوض کردن گلوله کلت هم توی لایه دیگر یعنی میشه ترکیب دو انیمیشن ❗️
خو دوستان انگیزه گرفتم که یک آموزش کوتاه در مورد کد نویسی c# در یونیتی بسازم توی این قسمت به ScriptableObject میپردازیم :
❤1
FPro Sensei
خو دوستان انگیزه گرفتم که یک آموزش کوتاه در مورد کد نویسی c# در یونیتی بسازم توی این قسمت به ScriptableObject میپردازیم :
نحوه ایجاد کلیک راست کردن در asset
FPro Sensei
نحوه ایجاد کلیک راست کردن در asset
به زبان ساده: ScriptableObject یک «ظرف داده» (Data Container) است که برای ذخیره حجم زیادی از دادهها به طور مستقل از مدلها و اشیاء داخل بازی (GameObjects) استفاده میشود.
FPro Sensei
به زبان ساده: ScriptableObject یک «ظرف داده» (Data Container) است که برای ذخیره حجم زیادی از دادهها به طور مستقل از مدلها و اشیاء داخل بازی (GameObjects) استفاده میشود.
در ادامه به طور کامل بررسی میکنیم که چرا و چگونه از آن استفاده میشود:
---
ℹ️ ۱. تفاوت اصلی با MonoBehaviour
بیشتر اسکریپتهایی که ما در یونیتی مینویسیم از
• به هیچ شیئی در صحنه (Scene) متصل نمیشود.
• به صورت یک فایل (Asset) در پوشه Project ذخیره میشود (مثل یک عکس یا فایل صوتی).
• دادههای آن بین صحنههای مختلف ثابت میماند.
ℹ️ ۲. چرا باید از آن استفاده کنیم؟ (مزایا)
🔖 الف) صرفهجویی در مصرف رم (Memory Efficiency)
فرض کنید یک بازی دارید که ۱۰۰۰ سرباز در صحنه دارد. هر سرباز ویژگیهایی مثل
• بدون ScriptableObject: هر ۱۰۰۰ سرباز یک کپی از این متغیرها را در حافظه نگه میدارند.
• با ScriptableObject: شما یک فایل میسازید که حاوی این اطلاعات است و هر ۱۰۰۰ سرباز فقط به آن یک فایل اشاره (Reference) میکنند. این یعنی داده فقط یکبار در حافظه بارگذاری میشود.
ب) تغییر دادهها در زمان اجرا (Persistence)
وقتی بازی را در ادیتور اجرا میکنید (Play Mode)، اگر مقادیر یک اسکریپت معمولی را تغییر دهید، بعد از توقف بازی، آن مقادیر به حالت اول برمیگردند. اما تغییرات روی ScriptableObject در ادیتور ذخیره میشوند و باقی میمانند.
---
ℹ️ ۱. تفاوت اصلی با MonoBehaviour
بیشتر اسکریپتهایی که ما در یونیتی مینویسیم از
MonoBehaviour ارثبری میکنند و باید به یک GameObject (مثل یک کاراکتر یا دوربین) متصل شوند. اما ScriptableObject:• به هیچ شیئی در صحنه (Scene) متصل نمیشود.
• به صورت یک فایل (Asset) در پوشه Project ذخیره میشود (مثل یک عکس یا فایل صوتی).
• دادههای آن بین صحنههای مختلف ثابت میماند.
ℹ️ ۲. چرا باید از آن استفاده کنیم؟ (مزایا)
🔖 الف) صرفهجویی در مصرف رم (Memory Efficiency)
فرض کنید یک بازی دارید که ۱۰۰۰ سرباز در صحنه دارد. هر سرباز ویژگیهایی مثل
MaxHealth و Strength دارد.• بدون ScriptableObject: هر ۱۰۰۰ سرباز یک کپی از این متغیرها را در حافظه نگه میدارند.
• با ScriptableObject: شما یک فایل میسازید که حاوی این اطلاعات است و هر ۱۰۰۰ سرباز فقط به آن یک فایل اشاره (Reference) میکنند. این یعنی داده فقط یکبار در حافظه بارگذاری میشود.
ب) تغییر دادهها در زمان اجرا (Persistence)
وقتی بازی را در ادیتور اجرا میکنید (Play Mode)، اگر مقادیر یک اسکریپت معمولی را تغییر دهید، بعد از توقف بازی، آن مقادیر به حالت اول برمیگردند. اما تغییرات روی ScriptableObject در ادیتور ذخیره میشوند و باقی میمانند.
❤2
FPro Sensei
در ادامه به طور کامل بررسی میکنیم که چرا و چگونه از آن استفاده میشود: --- ℹ️ ۱. تفاوت اصلی با MonoBehaviour بیشتر اسکریپتهایی که ما در یونیتی مینویسیم از MonoBehaviour ارثبری میکنند و باید به یک GameObject (مثل یک کاراکتر یا دوربین) متصل شوند. اما…
۳. مثال کاربردی: سیستم آیتمهای بازی
فرض کنید میخواهید دهها مدل اسلحه بسازید. به جای اینکه برای هر اسلحه یک اسکریپت جدا بنویسید، یک ScriptableObject تعریف میکنید
فرض کنید میخواهید دهها مدل اسلحه بسازید. به جای اینکه برای هر اسلحه یک اسکریپت جدا بنویسید، یک ScriptableObject تعریف میکنید
using UnityEngine;
// این خط باعث میشود بتوانید از منوی راستکلیک در یونیتی، فایل جدید بسازید
[CreateAssetMenu(fileName = "New Item", menuName = "GameData/Item")]
public class ItemData : ScriptableObject
{
public string itemName;
public int damage;
public Sprite icon;
public GameObject model;
}
❤1
FPro Sensei
۳. مثال کاربردی: سیستم آیتمهای بازی فرض کنید میخواهید دهها مدل اسلحه بسازید. به جای اینکه برای هر اسلحه یک اسکریپت جدا بنویسید، یک ScriptableObject تعریف میکنید using UnityEngine; // این خط باعث میشود بتوانید از منوی راستکلیک در یونیتی، فایل جدید بسازید…
حالا در پوشه Project راستکلیک میکنید و از منوی
سپس در اسکریپت اصلی کاراکتر، فقط کافیست به آن فایل اشاره کنید:
GameData/Item چندین اسلحه مثل "Sword"، "Axe" و... میسازید و مقادیرشان را در Inspector وارد میکنید.سپس در اسکریپت اصلی کاراکتر، فقط کافیست به آن فایل اشاره کنید:
public class Player : MonoBehaviour
{
public ItemData currentWeapon; // اینجا فایل اسلحه را درگ میکنید
void Start()
{
Debug.Log("اسلحه فعلی: " + currentWeapon.itemName);
}
}
❤1❤🔥1
FPro Sensei
using UnityEngine;
// این خط باعث میشود بتوانید از منوی راستکلیک در یونیتی، فایل جدید بسازید
[CreateAssetMenu(fileName = "New Item", menuName = "GameData/Item")]
public class ItemData : ScriptableObject
{
public string itemName;
public int damage;
public Sprite icon;
public GameObject model;
}
// این خط باعث میشود بتوانید از منوی راستکلیک در یونیتی، فایل جدید بسازید
[CreateAssetMenu(fileName = "New Item", menuName = "GameData/Item")]
public class ItemData : ScriptableObject
{
public string itemName;
public int damage;
public Sprite icon;
public GameObject model;
}
با کلیک راست کردن ان ظرف داده را ایجاد میکند
FPro Sensei
با کلیک راست کردن ان ظرف داده را ایجاد میکند
حالا آماده هست تا اطلاعات خود را وارد کنید تا ذخیره کند
❤1
FPro Sensei
حالا آماده هست تا اطلاعات خود را وارد کنید تا ذخیره کند
۴. چه زمانی از ScriptableObject استفاده کنیم؟
1. دیتابیس بازی: مشخصات دشمنان، مراحل، آیتمها و کوئستها.
2. تنظیمات بازی: تنظیمات صدا، گرافیک یا سختی بازی.
3. سیستم رویداد (Event System): برای برقراری ارتباط بین اشیاء مختلف بدون اینکه به هم وابسته (Coupled) باشند.
خلاصه:
اگر دادهای دارید که بین چندین شیء مشترک است یا میخواهید لیستی از ویژگیها را بدون ساختن GameObject ذخیره کنید، ScriptableObject بهترین انتخاب است.
1. دیتابیس بازی: مشخصات دشمنان، مراحل، آیتمها و کوئستها.
2. تنظیمات بازی: تنظیمات صدا، گرافیک یا سختی بازی.
3. سیستم رویداد (Event System): برای برقراری ارتباط بین اشیاء مختلف بدون اینکه به هم وابسته (Coupled) باشند.
خلاصه:
اگر دادهای دارید که بین چندین شیء مشترک است یا میخواهید لیستی از ویژگیها را بدون ساختن GameObject ذخیره کنید، ScriptableObject بهترین انتخاب است.