UnityChan(Channel)
403 subscribers
1.79K photos
62 videos
13 files
41 links
کانال آموزش و نکات UnityChan

گروه یونیتی https://t.me/UnityChan
Download Telegram
خو دوستان امروز آموزش Avatar Masking داریم همان چیزی که یکی از مراحل ساخت شوتر اول شخص و مقدمه ای برای انیمیشن fps محسوب میشود :
2
نحوه ایجاد یک Avatar Mask

کلیک راست کردن در asset و انتخاب avatar mask
3
FPro Sensei
تب مدیریت Avatar Mask
با کلیک کردن روی هر یک از بخش کاراکتر ان قسمت قرمز میشود قرمز شدن به منزله این هست که این قسمت از مپ ریگینک کاراکتر ریتارگت نشود ❗️
2
برای مثال کاراکتر من در حال کار با سیستم ریتارگت (humanoid) یونیتی هست و من میخوام کاری کنم که فقط پا ها ریتارگت بشوند بقیه قسمت ها انیمت نشوند و خالی باشن
2
FPro Sensei
آواتار خود ریگ کاراکتر که از قبل ایجاد کردم میدم و ایمپورت میکنم
بعد تمام ابجکت های کاراکتر من میاد ابجکت root به منزله ریگ کاراکتر هست
2
FPro Sensei
بعد تمام ابجکت های کاراکتر من میاد ابجکت root به منزله ریگ کاراکتر هست
بعد از ایجاد مپینک مورد نظرم من گفتم که بالا تنه کاراکتر تحت تاثیر ریتارگت یونیتی نباشه
FPro Sensei
بعد از ایجاد مپینک مورد نظرم من گفتم که بالا تنه کاراکتر تحت تاثیر ریتارگت یونیتی نباشه
نحوه اعمال : بعد از ایجاد و ماسک بروی تنظیمات لایه ریگ کلیک و ماسک خود را اعمال کنید
FPro Sensei
نحوه اعمال : بعد از ایجاد و ماسک بروی تنظیمات لایه ریگ کلیک و ماسک خود را اعمال کنید
مشاهده میکنید که بالا تنه کاراکتر من تحت تاثیر ریتارگت نمیگرد
1
FPro Sensei
مشاهده میکنید که بالا تنه کاراکتر من تحت تاثیر ریتارگت نمیگرد
کاربرد avatar masking چیست : مثلا شما یک انیمیشن ریلود کلت داری و یک انیمیشن دویدن کاراکتر میتونید با ایجاد لایه کاری کنید که دویدن فقط توی پا ها اجر باشه و عوض کردن گلوله کلت هم توی لایه دیگر یعنی میشه ترکیب دو انیمیشن ❗️
خو دوستان انگیزه گرفتم که یک آموزش کوتاه در مورد کد نویسی c# در یونیتی بسازم توی این قسمت به ScriptableObject میپردازیم :
1
FPro Sensei
نحوه ایجاد کلیک راست کردن در asset
به زبان ساده: ScriptableObject یک «ظرف داده» (Data Container) است که برای ذخیره حجم زیادی از داده‌ها به طور مستقل از مدل‌ها و اشیاء داخل بازی (GameObjects) استفاده می‌شود.
FPro Sensei
به زبان ساده: ScriptableObject یک «ظرف داده» (Data Container) است که برای ذخیره حجم زیادی از داده‌ها به طور مستقل از مدل‌ها و اشیاء داخل بازی (GameObjects) استفاده می‌شود.
در ادامه به طور کامل بررسی می‌کنیم که چرا و چگونه از آن استفاده می‌شود:

---

ℹ️ ۱. تفاوت اصلی با 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 تعریف می‌کنید

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