مقدماتی · ۴۵ دقیقه

آشنایی با Unity Editor و Scene

GameObject، Transform، Prefab و ساخت اولین صحنه.

تیم Nova Lab · · آموزش مقدماتی

قدم اول: نصب Unity Hub و ساخت پروژه

اولین قدم برای ورود به دنیای بازی‌سازی با Unity، نصب Unity Hub است. به سایت رسمی Unity بروید و Unity Hub را برای سیستم‌عامل خود دانلود کنید. Hub مرکز مدیریت نسخه‌های Unity، پروژه‌ها و ماژول‌های اضافی (مثل Android Build Support) است. پس از نصب، با حساب Unity خود وارد شوید — حساب رایگان Personal برای یادگیری و پروژه‌های کوچک کافی است.

از تب Installs یک نسخه LTS (Long Term Support) نصب کنید؛ برای مثال Unity 2022 LTS یا 6000 LTS. نسخه‌های LTS پایداری بیشتری دارند، باگ‌های کمتری در طول مسیر یادگیری ایجاد می‌کنند و مستندات آموزشی بیشتری برای آن‌ها موجود است. هنگام نصب، ماژول‌های مورد نیاز خود را انتخاب کنید: برای شروع فقط Editor کافی است؛ بعداً می‌توانید Android یا iOS را اضافه کنید.

از تب Projects روی دکمه New Project کلیک کنید. Unity Hub قالب‌های آماده نشان می‌دهد: برای بازی sprite-based و دید از کنار، 2D Core را انتخاب کنید؛ برای دنیای سه‌بعدی با دوربین آزاد، 3D Core مناسب‌تر است. نام پروژه را مثلاً FirstScene بگذارید و محل ذخیره را در پوشه‌ای مشخص و بدون فاصله یا کاراکتر فارسی انتخاب کنید — مسیرهای پیچیده گاهی باعث خطای build می‌شوند.

پس از ایجاد پروژه، Unity Editor باز می‌شود. چند ثانیه تا چند دقیقه صبر کنید تا کامپایل اولیه اسکریپت‌ها و import assetها تمام شود. نوار پایین Editor درصد پیشرفت را نشان می‌دهد. اگر Console خطای قرمز نشان داد، قبل از ادامه آن را بررسی کنید — اغلب مربوط به package یا مسیر پروژه است.

آشنایی با layout پیش‌فرض Editor ضروری است. پنجره Scene فضای ویرایش صحنه است؛ Game پیش‌نمایش بازی از دید Camera را نشان می‌دهد؛ Hierarchy لیست تمام GameObjectهای صحنه فعلی است؛ Inspector جزئیات و Componentهای شیء انتخاب‌شده را نمایش می‌دهد؛ Project فایل‌های asset پروژه را مدیریت می‌کند و Console پیام‌های log، warning و error را جمع می‌کند. از منوی Window > Layouts > Default می‌توانید چیدمان را هر زمان بازنشانی کنید.

یک عادت خوب از همین روز اول: پوشه‌بندی منظم در Project. راست‌کلیک در Project > Create > Folder و پوشه‌های Scenes، Scripts، Sprites، Prefabs و Audio بسازید. assetها را از ابتدا در پوشه درست قرار دهید تا پروژه بعد از چند هفته قابل مدیریت بماند. در Nova Lab، تمام آموزش‌های بعدی این ساختار پوشه را فرض می‌گیرند.

قدم دوم: درک GameObject و Transform

در Unity، همه چیز یک GameObject است — بازیکن، دشمن، دوربین، نور و حتی Managerهای منطق بازی. GameObject به‌تنهایی رفتار ندارد؛ با Component رفتار و ظاهر می‌گیرد. این معماری component-based یکی از قدرتمندترین ویژگی‌های Unity است: می‌توانید رفتارها را مثل قطعات لگو ترکیب کنید.

برای ساخت اولین شیء، در Hierarchy راست‌کلیک کنید. در پروژه 2D: 2D Object > Sprites > Square (یا Sprite از تصویر خودتان). در پروژه 3D: 3D Object > Cube. شیء جدید در Scene View ظاهر می‌شود و در Hierarchy انتخاب می‌شود. نام پیش‌فرض را فوراً به نام معنادار تغییر دهید — مثلاً Ground یا Player.

هر GameObject دارای Component به نام Transform است که سه ویژگی اصلی دارد: Position (موقعیت در فضا)، Rotation (چرخش بر حسب درجه) و Scale (مقیاس). در Scene View با کلیدهای W (Move)، E (Rotate) و R (Scale) بین ابزارها جابه‌جا شوید. برای تنظیم دقیق، مقادیر عددی را در Inspector وارد کنید. در پروژه 2D، محور Z معمولاً برای عمق لایه‌ها استفاده می‌شود نه حرکت بازیکن.

Componentهای رایج دیگر شامل Sprite Renderer (نمایش تصویر 2D)، Mesh Renderer (نمایش مدل 3D)، Collider (برخورد فیزیکی) و اسکریپت‌های C# سفارشی هستند. از دکمه Add Component در Inspector هر Component را اضافه کنید. اگر Component را حذف کردید، از منوی Component دوباره اضافه کنید — Unity Undo (Ctrl+Z) در اکثر عملیات کار می‌کند.

برای سازماندهی صحنه، GameObject خالی (Create Empty) به نام Environment بسازید و اشیاء مرتبط — زمین، پس‌زمینه، تزئینات — را با drag روی آن رها کنید تا child شوند. parent-child hierarchy باعث می‌شود جابه‌جایی گروهی ساده شود: اگر Environment را جابه‌جا کنید، همه childها هم‌زمان حرکت می‌کنند. نام‌گذاری واضح از همان ابتدا عادت حرفه‌ای است.

تمرین عملی: سه GameObject بسازید — Background، Ground و Player. Ground را در پایین صحنه، Player کمی بالاتر و Background در عقب قرار دهید. در Sprite Renderer، Order in Layer را تنظیم کنید: Background پایین‌تر (مثلاً 0)، Ground وسط (1)، Player بالاتر (2) تا لایه‌بندی درست نمایش داده شود.

قدم سوم: کار با Scene View و Camera

Scene View فضای کاری اصلی شماست. با کلیک وسط ماوس (یا Alt+کلیک چپ در برخی تنظیمات) می‌توانید pan کنید؛ اسکرول ماوس zoom؛ و با Alt+کلیک وسط orbit کنید. در پروژه 2D، دکمه 2D در بالای Scene View را فعال کنید تا محور Z و view از روبرو قفل شود — کار با spriteها بسیار راحت‌تر می‌شود.

Main Camera نقطه دید بازیکن است و تقریباً در هر Scene یک Camera اصلی دارید. در Inspector، Component Camera را ببینید: برای 2D، Projection را Orthographic بگذارید و Size را بین ۵ تا ۱۰ تنظیم کنید تا کل صحنه دیده شود. موقعیت Camera معمولاً (0, 0, -10) است — Z منفی یعنی Camera جلوی صحنه 2D قرار دارد.

Game View همان چیزی را نشان می‌دهد که بازیکن در runtime می‌بیند. Aspect ratio و resolution را از dropdown بالای Game View تغییر دهید تا رفتار UI و framing روی اندازه‌های مختلف صفحه را بسنجید. Maximize on Play (دکمه کنار Game tab) برای تست تمام‌صفحه مفید است.

دکمه Play در بالای Editor بازی را در همان Scene فعلی اجرا می‌کند. نکته حیاتی: تغییرات ایجادشده در حالت Play به‌صورت پیش‌فرض ذخیره نمی‌شوند — Unity پس از Stop، Scene را به حالت قبل از Play برمی‌گرداند. نوار بالای Editor در حالت Play نارنجی می‌شود. همیشه قبل از ویرایش جدی ساختار Scene، Play را متوقف کنید.

Gizmos آیکون‌ها و wireframeهای Componentها — مثل Collider و Light — را در Scene View نشان می‌دهند. از منوی Gizmos می‌توانید نمایش هر نوع را خاموش یا روشن کنید. برای دیباگ بدون اجرای بازی، Gizmos بسیار کمک می‌کند؛ مثلاً می‌بینید Collider دقیقاً کجا قرار دارد.

Scene را با File > Save As ذخیره کنید — مثلاً Assets/Scenes/FirstScene.unity. هر بار Ctrl+S (Cmd+S در Mac) را بزنید. Unity فایل Scene را جدا از Project ذخیره می‌کند؛ اگر Scene ذخیره نشود و Editor بسته شود، کار از دست می‌رود.

قدم چهارم: ساخت صحنه اول با چند GameObject

حالا یک صحنه ساده پلتفرمر می‌سازیم. تصاویر sprite خود را — یا placeholder رنگی — در Assets/Sprites قرار دهید. از Project، sprite را به Scene View یا Hierarchy بکشید (drag and drop). Unity خودکار GameObject با Sprite Renderer می‌سازد. اگر تصویر import نشده، در Inspector Texture Type را Sprite (2D and UI) بگذارید و Apply کنید.

Ground: یک sprite عریض برای زمین. Box Collider 2D اضافه کنید (Add Component > Physics 2D > Box Collider 2D) تا سطح جامد داشته باشید — در آموزش بعدی Player روی آن می‌ایستد. Player: sprite کوچک‌تر، کمی بالاتر از Ground. Background: sprite تمام‌صفحه در لایه عقب با Order in Layer پایین‌تر.

Scale و Position را طوری تنظیم کنید که Player روی Ground «قرار بگیرد» — لزوماً نیاز به برخورد فیزیکی در این مرحله نیست، فقط framing بصری. از ابزار Move (W) در Scene View استفاده کنید؛ Snap را از منوی بالای Scene View فعال کنید تا جابه‌جایی روی grid منظم شود.

برای زمین‌های بزرگ‌تر، Tilemap گزینه حرفه‌ای‌تر است: GameObject > 2D Object > Tilemap > Rectangular. Tile Palette را از Window > 2D > Tile Palette باز کنید، tile sprite بسازید و با براش روی Tilemap نقاشی کنید. Composite Collider 2D روی Tilemap برخورد یکپارچه ایجاد می‌کند. برای صحنه اول، یک Ground ساده کافی است؛ Tilemap را برای level design بعدی نگه دارید.

Build Settings را از File > Build Settings باز کنید و Scene فعلی را با Add Open Scenes به لیست Scenes In Build اضافه کنید. Sceneای که index 0 دارد، اولین Scene بارگذاری‌شده در build نهایی است. بدون این مرحله، build خالی یا خطا می‌دهد.

قبل از رفتن به قدم بعد، Scene را Save کنید و یک بار Play بزنید. باید Game View، صحنه ثابت با Ground، Player و Background را نشان دهد. اگر چیزی دیده نمی‌شود، Camera Size، موقعیت Camera و Order in Layer spriteها را بررسی کنید.

قدم پنجم: معرفی Prefab و تکرارپذیری

Prefab نسخه قابل استفاده مجدد و ذخیره‌شده یک GameObject (یا hierarchy از GameObjectها) است. وقتی ده دشمن، بیست سکه یا پنج درخت در level دارید، دستی کپی کردن error-prone است؛ Prefab تضمین می‌کند همه instanceها یکسان باشند و تغییر مرکزی ممکن شود.

Player را از Hierarchy به پوشه Assets/Prefabs در Project بکشید. آیکون آبی Prefab ساخته می‌شود و نام GameObject در Hierarchy bold و آبی می‌شود — یعنی به Prefab متصل است. حالا Prefab را دوباره به Scene بکشید: instance دوم Player ساخته می‌شود.

اگر Prefab اصلی را در Project باز کنید (double-click)، وارد Prefab Mode می‌شوید و تغییرات روی همه instanceها اعمال می‌شود. اگر روی یک instance در Scene تغییر دهید، Inspector دکمه Overrides نشان می‌دهد — Apply All تغییر را به Prefab برمی‌گرداند، Revert instance را به Prefab برمی‌گرداند. این workflow برای iterate سریع روی Enemy، Coin و Bullet ضروری است.

Prefab Variant برای نسخه‌های مشابه با تفاوت جزئی است: راست‌کلیک روی Prefab > Create > Prefab Variant. مثلاً EnemyFast از EnemyBase با speed بیشتر در اسکریپت. Variant ارث‌بری از base را حفظ می‌کند و فقط overrideهای مشخص دارد.

Nested Prefab یعنی Prefab داخل Prefab — مثلاً Weapon به‌صورت Prefab جدا child Player Prefab باشد. ساختار modular توسعه تیم و reuse را سریع‌تر می‌کند. برای پروژه تک‌نفره کوچک optional است؛ برای scale، standard است.

تمرین: یک Prefab Coin بسازید — sprite دایره‌ای کوچک با Circle Collider 2D (Is Trigger). چند instance در Scene قرار دهید. بعد رنگ sprite در Prefab اصلی را عوض کنید — همه instanceها باید هم‌زمان تغییر کنند. این رفتار Prefab را درک می‌کند.

قدم ششم: بهترین شیوه‌ها و گام بعدی

پوشه‌بندی منظم: Scenes، Scripts، Sprites، Prefabs، Audio، Materials. هر asset در یک جا مشخص — جستجو در Project سریع‌تر می‌شود. از نام‌گذاری PascalCase برای فایل‌های C# و camelCase برای متغیرها در کد پیروی کنید (convention Unity).

Scene را تمیز نگه دارید: GameObjectهای unused را حذف کنید؛ hierarchy عمیق بدون دلیل نسازید. Console را برای warningهای زرد روزانه چک کنید — warning امروز، bug فردا در build موبایل. Clear on Play را در Console فعال کنید تا log شلوغ نشود.

Ctrl+S برای Save Scene و Ctrl+Shift+S برای Save Project. Unity assetها را معمولاً auto-save می‌کند اما Scene دستی امن‌تر است. Version control (Git) را از همان هفته اول فعال کنید — فایل .gitignore استاندارد Unity را از github/gitignore استفاده کنید.

Documentation habit: وقتی Component یا API جدید یاد می‌گیرید، یک بار Inspector tooltip و Unity Manual (docs.unity3d.com) را بخوانید. Nova Lab در آموزش‌های بعدی فرض می‌کند با Editor، GameObject و Prefab راحت هستید.

آماده‌سازی برای آموزش بعدی: Prefab Player با Sprite و Transform درست، Ground با Box Collider 2D، Scene ذخیره‌شده در Scenes. فیزیک و کنترل بازیکن 2D را در tutorial بعدی اضافه می‌کنیم — Rigidbody2D، jump و ground check.

چک‌لیست پایانی: Hub و Editor نصب، پروژه 2D Core ساخته، سه پنجره Scene/Game/Hierarchy/Inspector را می‌شناسید، صحنه با Ground/Player/Background دارید، Prefab Player ساخته، Scene در Build Settings اضافه شده. اگر همه بله است، آماده tutorial فیزیک هستید.

سوالات متداول

تفاوت Scene و Prefab چیست؟

Scene محیط کامل بازی در یک لحظه است — Camera، نور، Player، UI — و در فایل .unity ذخیره می‌شود. Prefab قالب یک GameObject (یا گروه) است که چندبار در همان Scene یا Sceneهای مختلف instantiate می‌شود. Scene «سطح بازی» است؛ Prefab «قطعه قابل تکرار».

چرا GameObject خالی می‌سازیم؟

GameObject خالی فقط Transform دارد و برای گروه‌بندی منطقی، parent-child hierarchy، و mount point (مثلاً نقطه spawn گلوله) بدون رندر اضافی استفاده می‌شود. Managerهای بازی مثل GameManager هم اغلب GameObject خالی با اسکریپت هستند.

2D Core یا 3D Core را انتخاب کنم؟

اگر بازی sprite-based، side-view یا top-down 2D است، 2D Core مناسب‌تر است — Physics 2D و Sprite Renderer از اول فعال‌اند. برای دنیای سه‌بعدی، دوربین آزاد و Mesh، 3D Core. می‌توانید بعداً package 2D یا 3D را به پروژه دیگر اضافه کنید، اما template درست در شروع وقت صرفه‌جویی می‌کند.

تغییرات در حالت Play ذخیره می‌شوند؟

خیر، به‌صورت پیش‌فرض. Unity پس از Stop، state Scene را به قبل از Play revert می‌کند. نوار Editor نارنجی یادآوری است. برای تست دائمی در Edit mode تغییر دهید، یا از Runtime Debug Tools و Copy Component استفاده کنید.