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

گروه یونیتی https://t.me/UnityChan
Download Telegram
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
FPro Sensei
با کلیک راست کردن ان ظرف داده را ایجاد میکند
حالا آماده هست تا اطلاعات خود را وارد کنید تا ذخیره کند
1
FPro Sensei
حالا آماده هست تا اطلاعات خود را وارد کنید تا ذخیره کند
۴. چه زمانی از ScriptableObject استفاده کنیم؟
1. دیتابیس بازی: مشخصات دشمنان، مراحل، آیتم‌ها و کوئست‌ها.
2. تنظیمات بازی: تنظیمات صدا، گرافیک یا سختی بازی.
3. سیستم رویداد (Event System): برای برقراری ارتباط بین اشیاء مختلف بدون اینکه به هم وابسته (Coupled) باشند.

خلاصه:
اگر داده‌ای دارید که بین چندین شیء مشترک است یا می‌خواهید لیستی از ویژگی‌ها را بدون ساختن GameObject ذخیره کنید، ScriptableObject بهترین انتخاب است.
برای بازی Anime Wars چه چیزای تدارک دیدیم :❗️
یک مپ از Damichi (کشتن برای بقا در هزارتو)
🔥1
مپ High School Of The Dead (حالت زامبی بازی)
👍3