آموزش موتور ساخت بازی یونیتی Unity — بخش دوم
در بخش اول آموزش، نرم افزار یونیتی و اضافه کردن اشیاء به آن را بررسی کردیم. در این قسمت، چندین کاراکتر به دنیای بازی اضافه خواهیم کرد و با چگونگی استفاده از اشیاء بازی (GameObject) و Prefabها آشنا خواهید شد.
ساخت بازی با موتور بازی Unity
اشیاء بازی (GameObjects) تقریباً تمام عناصر موجود در موتور بازی Unity از جمله بازیکن شما، دشمنان، گلولههای روی صفحه نمایش، نمایش هندسی سطح و هر چیز دیگر در بازی را نمایش میدهند. درست مانند پنجره Project Browser که شامل تمام عناصر بازی است، نمای Hierarchy نیز حاوی لیستی از اشیاء بازی (GameObject) در صحنه شما میباشد. اگر پروژه شما باز نیست، اکنون آن را در موتور بازی Unity باز کنید.
روش باز کردن پروژه در برنامه Unity کمی عجیب است. شما میتوانید سیستم فایل خود را پیمایش کرده و فایل Scene را پیدا کنید. بر روی فایل Scene دابل کلیک کنید، سپس پروژه شما با صحنه انتخاب شده فعلی در برنامه Unity باز می شود.
اگر پروژه شما فهرست نشده باشد، با کلیک بر روی دکمه open، یک کادر محاورهای باز میشود. به جای جستجوی یک فایل خاص، سعی کنید، به بالاترین سطح فایلهای پروژه Unity رفته و بر روی select folder کلیک کنید. موتور بازی، پروژه Unity درون پوشه را شناسایی کرده و آن را باز میکند، یا اگر برنامه Unity را باز کنید و از مسیر File/Open بر روی گزینه Open کلیک کنید، فهرستی از پروژهها را مشاهده خواهید کرد. پروژه مورد نظر را از فهرست انتخاب کنید.
هنگامی که پروژه باز باشد، نمای hierarchy را بررسی کرده و تعداد اشیای بازی را بشمارید.
ممکن است اولین حدس شما دربارهی تعداد اشیاء بازی، سه GameObject باشد زیرا در قسمت اول آموزش سه شیء، arena (صحنه بازی)، space marine body (بدن قهرمان بازی) و space marine head (سر قهرمان بازی) را به بازی اضافه کردید. با این حال، دو GameObject دیگر نیز وجود دارد: دوربین اصلی (main camera) و نور جهت نما، با وجود اینکه این دو عنصر بهطور پیشفرض توسط موتور بازی Unity ایجاد میشوند ولی این عناصر نیز GameObject محسوب میشوند.
حتی اشیاء بازی بیشتری نیز وجود دارد. اگر دقت کنید سمت چپ شیء بازی که import کردهاید، یک مثلث وجود دارد. دکمه Alt در Pc یا دکمه option در Mac را پایین نگه داشته و بر روی مثلث مذکور کلیک کنید.
همانطور که مشاهده میکنید ، تعداد بسیار زیادی GameObject دارید.
سه مسئله مهم دربارهی GameObject ها وجود دارد:
- GameObject میتواند حاوی GameObject دیگری باشد. این قابلیت مفید در سطح پایه باعث سازماندهی و ارتباط اشیاء بازی (GameObject) مرتبط به یکدیگر میشود. مهمتر اینکه تغییر GameObject والد ممکن است بر روی GameObject فرزند تاثیر بگذارد.
- مدل (model) به GameObject تبدیل میشوند. موتور بازی Unity اشیاء بازی را برای قطعات مختلفی از مدل شما تولید میکند بهطوری که میتوانید مانند هر GameObject دیگر تغییر دهید.
- هر عنصر موجود در نمای hierarchy، یک GameObject است. حتی عناصری مانند دوربینها و چراغها نیز GameObject هستند.
انتقال اشیاء بازی (GameObject)
قبل از شروع، بر روی مثلث کلیک کنید تا درخت اشیاء بازی جمع شوند. در نمای hierarchy بر روی شیء بازی BobbleArena کلیک کنید، چند لحظه صبر کنید تا پنجره Inspector را مشاهده کنید، در این پنجره اطلاعاتی دربارهی GameObject انتخابی وجود دارد. اشیاء بازی (GameObject) شامل تعداد اجزای تشکیل دهنده است که این اجزا را میتوانید به عنوان واحدهای کوچک عملکردی در نظر بگیرید. یکی از مولفههایی که در همهی GameObject ها وجود دارد، مولفه Transform است.
مولفه Transform حاوی موقعیت (position) میزان چرخش (rotation) و اندازه (scale) شیء بازی است. با استفاده از نمای Inspector میتوانید میزان عددی مقیاس Transform را مشاهده کنید. هنگامی که موس را بر روی نام محورها قرار دهید، فلشها در کنار اشارهگر ظاهر میشوند. برای تنظیم مقدار مقیاسهای مذکور از جمله موقعیت و اندازه، دکمه چپ موس را پایین نگه داشته و اشارهگر موس را به طرف چپ یا راست بکشید. این ترفند، یک روش ساده برای اعمال تغییرات کوچک در مقادیر این مقیاسها است.
شیء بازی Bobble Arena را انتخاب کنید و موقعیت آن را به (X:-6.624 , Y: 13.622 , Z: 6.35) تنظیم کنید. ما هنگامی این بازی را توسعه دادیم، صحنه بازی در این موقعیت قرار گرفت. شما همچنین میتوانید، عنصر Arena ( صحنه بازی) را به (X: 2.0 , Y: 2.0 Z: 2.0) تنظیم کنید . این اندازه، فضای بیشتری برای حرکت در اختیار بازیکن قرار میدهد.
برای حرکت دادن space marine میتوانید ابتدا سر وی را انتقال داده و سپس بدن او را حرکت دهید، اما بهتر است که بخش های بدن وی را درون یک GameObject قرار دهید. در نمای hierarchy، بر روی دکمه Create کلیک کرده و گزینه Create Empty را انتخاب کنید.
شیء بازی empty، یک GameObject است که تنها شامل مولفه ضروری GameObject یعنی مولفه Transform است. شما همچنین میتوانید یک شیء بازی Empty را با کلیک کردن بر روی GameObject/Create Empty ایجاد کنید. برای ساخت دیگر مولفه ها نیز میتوانید از این روش استفاده کنید. از هر کدام از این روشها که برای پروژه شما مناسب است، استفاده کنید.
والد مولفههای Space Marine
در نمای hierarchy، یک شیء بازی جدید به نام GameObject مشاهده خواهید کرد. بر روی شیء بازی GameObject کلیک کنید و نام آن را به SpaceMarine تغییر دهید. شما می توانید در نام شیء بازی، از فاصله استفاده کنید، مانند Space Marine. فایل های BobbleMarine-Body و BobbleMarine-Head را به درون شیء بازی SpaceMarine بکشید. به دلیل وابستگی GameObjectهای فرزند به GameObject والد، گاهی مسائلی پیش خواهد آمد. برای مثال، حتی اگر GameObject والد حرکت نکند، مقادیر موقعیت فرزندان تغییر میکنند.
شیء بازی Space Marine را در نمایhierarchy انتخاب کنید به نمای Scene بروید و برای تمرکز بر روی این شیء بازی، کلید F را فشار دهید. احتمالاً، صحنه بازی (arena) دید شما را مسدود میکند. خوشبختانه شما میتوانید صحنه بازی (arena) را پنهان کنید. برای انجام این کار، در نمای hierarchy بر روی Bobble Arena کلیک کنید، سپس در نمای Inspector تیک کادر سمت چپ نام GameObject را بردارید. این کار باعث پنهان شدن صحنه بازی (arena) می شود.
حال شما باید فقط قهرمان بازی را ببینید. شیء بازی Space Marine را انتخاب کنید. در نمای Inspector ، موس را بر روی برچسب موقعیت X حرکت دهید تا فلشهای جهت دار نمایان شوند. کلید سمت چپ موس را نگه دارید و موس را به طرف چپ و راست بکشد. توجه کنید که چگونه تمام اشیای بازی، نسبت به شیء بازی والد خود حرکت میکنند. همانطور که مشاهده میکنید، داشتن شیء بازی والد دارای مزیتهای خاصی است.
هنگامی که یک GameObject به عنوان والد GameObject دیگری تعیین شود، موقعیت GameObject فرزند تغییر نخواهد کرد. تنها تغییری که رخ میدهد این است که موقعیت GameObject فرزند به GameObject والد وابسته میشود. یعنی اگر موقعیت شیء بازی فرزند به (0, 0, 0) تنظیم شود، این شیء بازی به جای قرار گرفتن در مرکز دنیای بازی، در مرکز شیء بازی والد قرار میگیرد.
حال، شما برای سرهم بندی قهرمان بازی خود باید این کار را انجام دهید. BobbleMarine-Body را انتخاب کنید، سپس موقعیت آن در نمای Inspector را به (X:0, Y:0, Z:0) تنظیم کنید. BobbleMarine-Head را انتخاب کنید، و موقعیت آن در نمای Inspector را به (X: -1.38, Y: 6.16, Z: 1.05) تنظیم کنید. با اعمال این تنظیمات، سر و بدن قهرمان بازی شما سرهم بندی میشوند.
تعیین موقعیت قهرمان بازی
اکنون زمان آن رسیده است که Space Marine را در موقعیت مناسب خود قرار دهید . شیء بازی BobbleArena را انتخاب کنید، و برای فعال سازی مجدد آن، در نمای Inspector تیک کنار نام آن را انتخاب کنید. شیء بازی Space Marine را انتخاب کنید، و موقعیت آن را به (X: 4.9, Y: 12.54, Z:5.87) تنظیم کنید. همچنین، میزان چرخش این شیء بازی را به (X:0, Y:0, Z:0) تنظیم کنید. قهرمان بازی شما باید در مرکز صحنه بازی قرار گیرد. هنگامی که موقعیت قهرمان بازی را تنظیم کردید، در نمای Scene کلید F را فشار دهید تا قهرمان بازی را که با افتخار در میان میدان بازی ایستاده است را مشاهده کنید.
ایجاد Prefab
این بازی دارای موجودات دیگری است که آنها نیز همانند قهرمان بازی از قطعات بسیاری تشکیل شده اند و باید سرهم بندی شوند. در نمای hierarchy بر روی دکمه Create کلیک کنید و از منوی کشویی گزینه Create Empty را انتخاب کنید. بر روی شیء بازی ایجاد شده کلیک کنید و نام آن را Alien قرار دهید. شیء بازی Alien را در نمای Hierarchy انتخاب کنید و موقعیت آن را در نمای Inspector به مقادیر (X:2.9, Y: 13.6, Z: 8.41) تنظیم کنید. در پنجره Project Browser، شیء بازی BobbleEnemy-Body را از پوشه Models به درون شیء بازی Alien بکشید.
موقعیت شیء بازی Bobble Enemy-Body را به (X:0, Y: 0, Z: 0) تنظیم کنید . اکنون Alien و قهرمان بازی باید بر روی صحنه بازی در کنار یکدیگر باشند.
حال باید سر دشمن (Alien) به بدن وی اضافه شود. برای انجام این کار، شیء بازی BobbleEnemy-Head را از پنجره Project Browser به درون شیء بازی Alien بکشید. موقعیت شیء بازی سر دشمن را به (X: 0.26, Y: 1.74, Z: 0.31)، میزان چرخش آن را (X: -89.96, Y: 0, Z: 0) و اندازه آن را به (X: 100, Y: 100, Z: 100) تنظیم کنید.
این کار یک اشکال کوچک دارد. از آنجایی که تعداد اشیا بازی دشمن زیاد هستند، ممکن است قهرمان بازی قادر به تشخیص آنها نباشد.
در این مرحله، شما یک شیء بازی والد برای قهرمان بازی و یک شیء بازی دیگر برای دشمن (Alien) دارید. وجود یک شیء بازی والد برای قهرمان بازی کافی است زیرا تنها یک قهرمان بازی وجود دارد. اما برای دشمن (alien) نیاز به تعداد زیادی شیء بازی والد دارید.
شما میتوانید برای ساخت دشمنان مشابه، شیء بازی alien را کپی و باز نشانی (paste) کنید اما همه آنها، عناصر جداگانهای هستند. اگر نیاز به تغییر در رفتار یک alien دارید، باید هر نمونه را جداگانه تغییر دهید در این موقعیت بهتر است از یک prefab استفاده کنید؛ prefab برای ایجاد تعداد زیادی کپی جداگانه مورد استفاده قرار میگیرد. هنگامی که یک prefab را تغییر میدهید، میتوانید آن تغییرات را به بقیه نمونهها نیز اعمال کنید.
ساختن یک prefab بسیار ساده است. شیء بازی Alien را انتخاب کنید و به درون پوشه prefabs در پنجره Project Browser بکشید.
با انجام این کار،چند تغییر مشاهده میکنید: یک موجودیت جدید با یک آیکون کنار آن در پوسته prefabs شما وجود دارد. همچنین مشاهده خواهید کرد که نام شیء بازی در نمای Hierarchy آبی رنگ است.
برای ساخت یک prefab نیازی نیست مدل خود را دروی پوشه prefabs بکشید، تنها کافی است یک شیء بازی را درون هر پوشه در پنجره Project Browser بکشید. البته داشتن یک پوشه prefabs، ایده خوبی است. رنگ آبی شیء بازی نشان میدهد که آن شیء بازی از یک prefab یا یک مدل مانند BobbleArena گرفته شده است. سپس نمای Inspector را بررسی کنید، چندین دکمه اضافی مشاهده خواهید کرد.
در زیر، تعدادی از این دکمه ها توضیح داده شده است: