آموزش ساخت بازی دو بعدی (جلسه ی هشتم)
برای دیدن جزئیات تمام جلسه های این دوره اینجا کلیک کنید .
منوهای بازی ، ایجاد بارگزاری و شروع مجدد بازی
در درس های قبلی یک بازی تک مرحله ای با گیم پلی ، موزیک ، گرافیک و particle پیاده کردیم .
به هر حال ، زمانی که player می میرد بازی ادامه پیدا میکند و شروع کردن مجدد آن ممکن نیست هم چنین بازی بصورت مستقیم وارد یک مرحله میشود و هیچ منو یا کنترلی وجود ندارد .
از آنجا که به یونیتی ۴٫۶ و نسخه های بالاتر ابزار UI که به آن GUI می گویند اضافه شده میتوانیم با استفاده از این ابزار منوهای خوبی بسازیم
ما نمیخواهیم GUI پیچیده ای در این آموزش بسازیم ولی پایه و مفاهیم را یاد خواهیم گرفت
Asset های مورد نیاز :
پس زمینه :
لوگو :
asset ها را دانلود کنید و به پروژه ی خودتان اضافه کنید شما میتوانید یک فولدر به نام Menu بسازید و asset های مربوط به منو را درون آن قرار دهید که زیر مجموعه ی فولدر sprites باشد در غیر اینصورت تداخل بین فایل های دیگر اتفاق می افتد .
برای دکمه ها از یک نوع استاندارد استفاده خواهیم کرد
صحنه ی عنوان یا Title screen
تقریبا تمام بازی ها یک صفحه ی عنوان برای معرفی و نمایش نام بازی دارند چیزی که کاربر هنگام شروع بازی آنرا میبیند
Scene یا صحنه
یک صحنه ی جدید بسازید :
- “File” -> “New scene”
- صحنه را در پوشه ی Scenes با نام Menu ذخیره کنید
صجنه ما باید شامل :
- یک بک گراند
- یک لوگو
- اسکریپتی که بتواند دکمه ها را نمایش دهد
برای ساخت بک گراند ابتدا باید یک Image از نوع UI بسازید برای این کار به Game Object” -> “UI” -> “Image بروید

آموزش ساخت منو برای بازی در یونیتی
تصویر بک گراندی که قبلا وارد یونیتی کرده اید را به این Image که تازه ساخته اید اختصاص دهید تا تصویر بک گراند را به نمایش بگذارد
anchor مربوط به Image را از Inspector به horizontally & vertically تغییر دهید
مطمئن شوید که مقدار top buttom left right صفر باشد
اکنون شما بک گراندی دارید که در تمام رزولیشین ها بصورت تمام صفحه نمایش داده خواهد شد

ساخت منو در یونیتی
حال لوگو را همانند بک گراند اضافه کنید
- سایز انرا به ۵۱۲*۵۱۲ تغییر دهید
- Preserve ratio را تیک بزنید
- anchor را به middle & center تغییر دهید
البته شما میتوانید تصاویر بهتر خود را بجای تصاویر بالا بگذارید که شامل نام و لوگوی اختصاصی خود شما باشد اما به خاطر داشته باشید که کاربر دوس دارد هر چه سریعتر بازی بارگزاری شود
اسکریپت Loading یا بارگزاری
جال ما میخواهیم دکمه ای اضافه کنیم که با کلیک آن بازی باز شود
برای ساخت یک دکمه به منوی Game Object -> UI -> Button مراجعه کنید جای انرا میتوانید تغییر دهید و میتوانید متن text درون آنرا نیز عوض کنید
یک اسکریپت جدید ایجاد کنید و نام انرا MenuScript بگذارید اسکریپت ساخته شده را به game object خالی که قبلا ساختیم به نام Scripts اختصاص دهید (این game object یک شی خالی هست که فقط اسکریپت ها را نگهداری میکند )
محتویات اسکریپت باید به صورت زیر باشد
using UnityEngine; /// <summary> /// Title screen script /// </summary> public class MenuScript : MonoBehaviour { public void StartGame() { // "Stage1" is the name of the first scene we created. Application.LoadLevel("Stage1"); } }
برای استفاده کردن از این اسکریپت بر روی button که پیش تر ساختیم به روش زیر عمل کنید
روی Button کلیک کنید و به Inspector بروید
- در قسمت پایین روی + کلیک کنید تا یک Listener جدید درست کنید
- شی Scripts را که اسکریپت روی ان قرار دارد به خط خالی در listener درگ کنید
- در قسمت تابع فراخوانی MenuScript.StartGame() را انتخاب کنید
بازی را اجرا کنید و نتیجه نهایی را ببینید
روی Play کلیک کنید و …. برنامه کرش میکند .
Level 'Stage1' (-1) couldn't be loaded because it has not been added to the build settings. To add a level to the build settings use the menu File->Build Settings...
خطا بصورت شفاف مشخص هست و کاری که باید انجام دهیم اضافه کردن مرحله به تنظیمات بازی هست
اضافه کردن مرحله یا صحنه به قسمت Build در یونیتی
به منوی “File” -> “Build Settings” بروید
حالا تمام صحنه هایی که ساخته اید و میخواهید درون پکیج بازی قرار بگیرد را به این قسمت درگ کنید مثلا Menu و Stage1
از تنظیمات خارج شوید و بازی را اجرا کنید و دکمه ی play را بزنید
گاهی اوقات نیاز دارید که game object هایی که در صحنه حاضر هستند با رفتن به صحنه ی جدید از بین نروند در این حالت باید از متد DontDestroyOnLoad(aGameObject) استفاده کنید .
پایان بازی و شروع مجدد
در نهایت ، ما میخواهیم به کاربر این اجازه را بدهیم که بعد از مرگ باریکن ، بتواند بازی را از نو شروع بکند
در بازی این جریان ها اتفاق می افتد :
- player توسط گلوله مورد اصابت قرار میگیرد
- HealthScript.OnCollisionEnter فراخوانی میشود
- player مقدار 1 از سلامتی خود را از دست میدهد
- HealthScript شی player را نابود میکند زمانی که مقدار جان player کمتر از مقدار ۱ شود
ما باید دو قدم دیگر اضافه کنیم :
- PlayerScript.OnDestroy فراخوانی میشود
- یک اسکریپت جدید به نام GameOverScript بسازیم و به صحنه اضافه کنیم
پس در پوشه ی اسکریپت ها یک اسکریپت جدید به نام GameOverScript بسازید
محتویات زیر را کپی کنید که شامل پیاده سازی دکمه هایی برای Restart و Back to Menu هست :
using UnityEngine; using UnityEngine.UI; /// <summary> /// Start or quit the game /// </summary> public class GameOverScript : MonoBehaviour { private Button[] buttons; void Awake() { // Get the buttons buttons = GetComponentsInChildren<Button>(); // Disable them HideButtons(); } public void HideButtons() { foreach (var b in buttons) { b.gameObject.SetActive(false); } } public void ShowButtons() { foreach (var b in buttons) { b.gameObject.SetActive(true); } } public void ExitToMenu() { // Reload the level Application.LoadLevel("Menu"); } public void RestartGame() { // Reload the level Application.LoadLevel("Stage1"); } }
همچنین ما به تعداد آیتیم UI نیازمندیم که باید انها را بسازیم
- در صحنه ی Stage1 یک Panel درست کنید
- تصویر Source Image را پاک کنید و رنگ آنرا به سفید با آلفای کامل تغییر دهید
- دو عدد دکمه مثل بالا اضافه کنید
- GameOverScript را به panel که همین الان ساختیم اضافه کنید
برای هر یک از Button ها :
- رویداد OnClick() را اضافه کنید
- GameOverScript را انتخاب کنید
برای مثال دکمه Back to menu :
حال در اسکریپت PlayerScript باید مثل زیر عمل کنیم
void OnDestroy() { // Game Over. var gameOver = FindObjectOfType<GameOverScript>(); gameOver.ShowButtons(); }
بازی را اجرا کنید و سعی کنید بمیرید :
خب اساس کار همین هست شما میتوانید بسته به سلیقه ی خود انیمیشن یا جلوه های صوتی هم اضافه کنید
خسته نباشید
لطفا سایت سامنتا را با دوستان خود به اشتراک بگذارید
با احترام

واقعا سایت عالی مفیدی