قدم به قدم آموزش ساخت بازی اندروید با unity
تعدادی موتور بازی و چارچوب برای ساخت بازی وجود دارد. گزینههای محبوب برای این کار عبارتاند از Unity، Unreal Engine، Godot و Cocos2d-x. هرکدام از این موتورها مزایا و معایب خاص خود را دارند و برای انواع خاصی از بازیها مناسب هستند. Unity یک گزینه عالی برای بازیهای دوبعدی و سهبعدی است که در این مطلب آموزشی از مکتوب قصد داریم در مورد آن صحبت کنیم و یک پروژه ساخت بازی با Unity را ارائه کنیم. پس باما همراه باشید تا باهمدیگر در ادامه یک بازی جذاب را بسازیم. قبل از اینکه شروع به آموزش ساخت بازی اندروید با Unity کنیم، ابتدا مختصری در رابطه با یونیتی و ویژگیهای آن صحبت خواهیم کرد.
یونیتی چیست؟
موتور Unity یکی از محبوبترین موتورهای بازی برای توسعه بازیها بر روی پلتفرمهای مختلف است. این موتور دارای طیف گستردهای از ویژگیها و ابزارهایی است که به توسعهدهندگان اجازه میدهد تا بازیهای دوبعدی و سهبعدی را با تصاویری خیرهکننده، صوتی قدرتمند و گیم پلی فراگیر ایجاد کنند. Unity توسط طیف گستردهای از توسعهدهندگان، از Indie تا AAA استفاده میشود و برای ساخت برخی از محبوبترین بازیهای موجود در بازار استفاده شده است.
این موتور مجموعه گستردهای از ابزارها را برای ایجاد و طراحی بازیها از جمله سیستمهای ذرات، جلوههای نوری، سیستمهای صوتی و غیره ارائه میکند. یونیتی همچنین از طیف گستردهای از پلتفرمها از جمله کامپیوتر شخصی، کنسولها، دستگاههای تلفن همراه و واقعیت مجازی پشتیبانی میکند.
موتور Unity همچنین یک فروشگاه جامع را ارائه میدهد که شامل مجموعه عظیمی از مدلهای سهبعدی، صدا و موارد دیگر است که میتواند برای ایجاد تصاویری خیرهکننده و گیم پلی فراگیر استفاده شود. Unity همچنین دسترسی به طیف گستردهای از پلاگینها و میانافزارها را فراهم میکند که میتوان از آنها برای گسترش قابلیتهای موتور استفاده کرد. به طور کلی، Unity یک انتخاب عالی برای ایجاد بازی است. در این آموزش ساخت بازی اندروید با Unity ما با ابعاد مختلف این موتور بازی آشنا خواهیم شد.
موتور یونیتی چگونه کار میکند؟
Unity یک موتور بازی است که به توسعهدهندگان اجازه میدهد تا تجربیات تعاملی سهبعدی و دوبعدی ایجاد کنند. Unity به توسعهدهندگان اجازه میدهد تا با استفاده از C#، JavaScript یا Boo، منطق بازی را کدنویسی کنند. همچنین ابزارها و ویژگیهای مختلفی را برای ایجاد بازیهای سهبعدی و دوبعدی ارائه میدهد، از جمله موتور فیزیک یکپارچه، ابزار قدرتمند انیمیشن، موتور رندر قدرتمند و غیره. با کمک این ابزارها، توسعهدهندگان میتوانند بازیهای کاملی را در یک موتور ایجاد کنند. یونیتی همچنین به توسعهدهندگان اجازه میدهد تا بازیهای خود را در چندین پلتفرم از جمله وب، موبایل، رایانه شخصی و کنسول اجرا کنند که در این آموزش ساخت بازی اندروید با Unity ما یک بازی ساده برای اندروید خواهیم ساخت.
یونیتی از چندین مؤلفه تشکیل شده است، از جمله ویرایشگر، که برای ایجاد و ویرایش پروژهها استفاده میشود. Player که برای اجرای و تست بازیها استفاده میشود. داراییها، که داراییهای بازی مانند مدلهای سهبعدی، فایلهای صوتی و بافت ها را ذخیره میکند و خدمات، که دسترسی به ویژگیهای اضافی، مانند تجزیهوتحلیل و عملکرد چند نفره را فراهم میکند. یونیتی همچنین مجموعهای جامع از ابزارها را در اختیار توسعهدهندگان قرار میدهد تا بازیهای خود را اشکالزدایی، پروفایل و بهینهسازی کند.
Unity همچنین طیف گستردهای از ویژگیهای اضافی مانند ویرایشگر انیمیشن قدرتمند، ابزارهای پیشرفته ویرایش زمین، کنترلکنندههای شخصیت مبتنی بر فیزیک و غیره را ارائه میدهد. با کمک این ابزارها، توسعهدهندگان میتوانند تجارب بسیار فراگیر و تعاملی ایجاد کنند. یونیتی همچنین یک کتابخانه بزرگ از پلاگینها را ارائه میدهد که به توسعهدهندگان اجازه میدهد تا قابلیتهای موتور را گسترش دهند.
مزایای موتور بازی یونیتی
از مهمترین مزایای یونیتی برای ساخت بازی میتوان به موارد زیر اشاره کرد:
- پشتیبانی Cross-Platform: Unity از توسعه برای طیف گستردهای از پلتفرمها، از جمله Windows، MacOS، iOS، Android، Xbox One، Playstation 4 و غیره پشتیبانی میکند. این به توسعهدهندگان اجازه میدهد تا بازیهایی بسازند که با کمترین تلاش بر روی پلتفرمهای مختلف منتشر شوند.
- ویرایشگر انعطافپذیر و قدرتمند: ویرایشگر یونیتی بصری و کاربرپسند و در عین حال بسیار قدرتمند است. این شامل طیف گستردهای از ویژگیها، از جمله یک موتور بازی داخلی، ایمپورت دارایی، قابلیتهای اسکریپت، موتور فیزیک، ابزارهای انیمیشن و غیره است.
- گرافیک با کیفیت بالا: Unity به توسعهدهندگان اجازه میدهد تا بازیهایی با گرافیک خیرهکننده ایجاد کنند. یونیتی از ویژگیهای گرافیکی پیشرفته مانند نور HDR، انسداد محیط، سایههای بیدرنگ و غیره پشتیبانی میکند.
- فروشگاه ابزار یا دارایی: فروشگاه ابزار یونیتی حاوی هزاران ابزار است تا به توسعهدهندگان کمک کند تا بازیها را سریعتر بسازند. اینها شامل مدلها، انیمیشنها، اسکریپتها و موارد دیگر است.
- یادگیری آسان: یادگیری یونیتی حتی برای مبتدیان نسبتاً آسان است. این شامل آموزشها و مستندات جامع و همچنین یک جامعه فعال از توسعهدهندگان با تجربه است.
- پشتیبانی از واقعیت مجازی و واقعیت افزوده: یونیتی از توسعه بازیها برای پلتفرمهای واقعیت مجازی و واقعیت افزوده مانند Oculus Rift، HTC Vive و Microsoft HoloLens پشتیبانی میکند.
- خدمات ابری: یونیتی مجموعهای از خدمات ابری را برای کمک به توسعهدهندگان در ایجاد، مدیریت و استقرار بازیهای خود ارائه میدهد. اینها شامل میزبانی چندنفره، تجزیهوتحلیل و موارد دیگر است.
- ابزارهای بهینهسازی: یونیتی شامل طیف وسیعی از ابزارها است که به توسعهدهندگان کمک میکند تا بازیهای خود را برای عملکرد بهینه کنند. این شامل یک نمایهساز، ابزارهای بهینهسازی حافظه و موارد دیگر است.
- مقرونبهصرفه: Unity یکی از مقرونبهصرفه ترین موتورهای بازی در بازار است. استفاده از آن برای پروژههای شخصی رایگان است و دارای طیف وسیعی از طرحهای اشتراک برای پروژههای تجاری است.
- پشتیبانی عالی از جامعه: یونیتی دارای یک جامعه فعال و اختصاصی از توسعهدهندگان است که همیشه مایل به کمک به کاربران جدید هستند. انجمنهای Unity و Stack Overflow منابع عالی برای یافتن پاسخ سؤالات هستند.
مقاله پیشنهادی: طراحی و ساخت بازی اندروید بدون کدنویسی
معایب موتور بازی یونیتی
در کنار همه مزایای خوب آن، یونیتی معایبی نیز دارد از جمله موارد زیر:
- عدم مقیاسپذیری: فناوری Unity برای پروژههای بازیهای کوچک و متوسط مناسبتر است، زیرا مقیاس کردن یک بازی Unity به یک تولید در مقیاس بزرگ میتواند دشوار باشد.
- ادغام محدود شخص ثالث: یونیتی ادغام شخص ثالث محدودی دارد، بنابراین توسعهدهندگان ممکن است مجبور شوند برای جنبههای خاصی از بازی خود به ابزارها و شرکای یونیتی اعتماد کنند.
- عدم وجود شبکه: یونیتی ویژگی شبکه داخلی ندارد، بنابراین توسعهدهندگان باید یک راهحل شخص ثالث برای این کار پیدا کنند.
- استفاده از حافظه بالا: بازیهای یونیتی میتوانند کاملاً منابع فشرده باشند، که میتواند منجر به مشکلات عملکرد در دستگاههای پایینتر شود.
- دسترسی محدود به کد منبع: کد منبع Unity در دسترس نیست، بنابراین توسعهدهندگان کنترل محدودی بر نحوه ساخت بازی خوددارند.
دوره پیشنهادی: آموزش ساخت بازی موتور سواری برای موبایل (بدون کدنویسی)
قدم به قدم آموزش ساخت بازی اندروید با Unity
در این آموزش ساخت بازی اندروید با Unity قصد داریم یک کلون ساده از بازی Flappy Bird را در Unity بسازیم. یونیتی ابزارهای قدرتمندی برای توسعهدهندگانی دارد که میخواهند یک بازی موبایل بسازند و در این آموزش، ما یکی از آنها را از ابتدا میسازیم.
مقاله پیشنهادی: آشنایی با بهترین فریمورک های ساخت بازی اندروید
راهاندازی پروژه بازی در یونیتی برای موبایل
شما باید یک پروژه جدید 2D Unity ایجاد کنید.
قبل از انجام هر کاری در اینجا، اجازه دهید در مورد تنظیماتی که باید قبل از شروع آموزش ساخت بازی اندروید با Unity برای دستگاههای تلفن همراه انجام دهیم صحبت کنیم. اولین مورد تغییر پلت فرم ساخت است. سمت راست بالای پروژه شما چیزی شبیه به این باید باشد.
سپس باید چند چیز را تغییر دهیم. در حال حاضر، پروژه ما به عنوان یک بازی دسکتاپ تنظیم شده است. ما باید به یک بازی موبایل برویم. برای تغییر پلت فرم مورد نظر خود به File -> Build Settings بروید.
تغییرات بعدی به صورت تصویر زیر است:
اکنون توجه کنید که در مورد پلتفرم تلفن همراه چند گزینه به ما داده شده است. ما میتوانیم برای اندروید یا iOS توسعه دهیم.. همانطور که گفته شد، من قصد دارم اندروید را انتخاب کنم. هنگامیکه انتخاب خود را انجام دادید، روی “switch platform” کلیک کنید و اجازه دهید Unity پروژه شما را مجدداً پیکربندی کند.
اکنون ما آماده شروع توسعه بازی خود هستیم!
مقاله پیشنهادی: ساخت بازی اندروید چه مراحلی را طی میکند؟
تنظیم وضوح صفحهنمایش یونیتی
قبل از اینکه شروع به قرار دادن اشیاء بازی در صحنه خود کنیم، باید مطمئن شویم وضوح صفحهنمایش ما درست است. از آنجایی که ما در حال توسعه برای موبایل هستیم، آزادی کمتری در تعیین وضوح بازی خود داریم. بازیهای موبایلی میتوانند در دو جهت متفاوت باشند، افقی یا عمودی. در مورد پروژه ما، از جهتگیری پرتره استفاده خواهیم کرد. به تب بازی بروید و نمای بازی را روی وضوح پرتره تنظیم کنید. مانند تصویر زیر:
ما وضوح صفحهنمایش مناسبی را تنظیم کردهایم و اکنون میتوانیم ساخت بازی خود را شروع کنیم.
وارد کردن ابزارها
حال در این بخش از آموزش ساخت بازی اندروید با Unity ما ابزارهایی را که قرار است برای این آموزش استفاده کنیم را ایمپورت یا وارد میکنیم. طبق تصویر زیر:
اگر به فایل تصاویر نگاه کنید، متوجه خواهید شد که در اینجا کارهای زیادی برای کار کردن وجود دارد. ما پسزمینهها، موانع و حتی چند رابط کاربری داریم. ما بیشتر قرار است با سنگها، هواپیماها و پسزمینهها کار کنیم.
راهاندازی Sprites یا شی پرنده
در صحنه ما، متوجه خواهید شد که ابزاری وجود دارد که اندازه دوربین ما و در نتیجه وضوح صفحه را که ما انتخاب کردهایم نشان میدهد.
همهچیز بازی ما داخل آن مستطیل بر روی صفحهنمایش دستگاه نمایش داده میشود. این میتوانید راهنمایی مفید باشد که میتوانیم از آن برای مقیاس بندی و قرار دادن تصاویر در جایی که نیاز داریم استفاده کنیم. پس کار را ادامه داده و یک تصویر هواپیما، پسزمینه و زمین را به داخل صحنه بکشید.
اضافه کردن پس زمینه به صورت زیر است:
اضافه کردن سنگ و سطح زمین به صورت زیر است:
حال صحنه خود را به عنوان “GameScene” در پوشه “Scenes” ذخیره کنید.
پس زمینه را به تناسب صحنه تغییر خواهیم داد. طبق تصویر زیر:
در این بخش از ساخت بازی اندروید با یونیتی ما به دنبال ساخت یک شی پرنده یا هواپیما هستیم:
در قدم بعد از آموزش ساخت بازی اندروید با Unity، ما باید موانع خود را تنظیم کنیم. برای این موارد، یک جفت سنگ را از پوشه “rocks” انتخاب کرده و آنها را به صحنه خود میکشیم. اکنون متوجه خواهید شد که ما نمیتوانیم صخرههایمان را ببینیم زیرا پشت پسزمینه هستند.
این به این دلیل است که ما ترتیب مرتبسازی تصاویر خود را درست نکردهایم. از آنجایی که بازیهای دوبعدی از نظر فنی دارای عمق Z نیستند، Unity همه آنها را در یک پشته رندر میکند. سپس میتوانیم تعیین کنیم که هر تصویر با چه ترتیبی در پشته باید رندر شود. در حال حاضر، همه آنها روی 0 تنظیم شدهاند، بنابراین Unity فقط همه آنها را در یک لایه رندر میکند.
برای رفع این مشکل، ترتیب رندر پسزمینه 1-، بازیکن 1، و زمین و سنگها 2 باید باشد.
برای بازیکن:
برای زمین و موانع:
به این ترتیب، ما میدانیم که مهم نیست که این تصاویر را در کجا قرار دهیم، همه آنها به ترتیب درست رندر میشوند. اکنون که ترتیب رندر خود را درست کردیم، سنگها را طوری قرار دهید که گویی مانعی مانند این هستند:
ما میخواهیم فضای زیادی را در بالا و پایین صخرهها بگذاریم، بنابراین آنها را در صورت نیاز مقیاس قرار دهیم. ما میخواهیم همه این موانع یک شی باشند، بنابراین یک شی بازی خالی به نام “Rocks” ایجاد میکنیم.
ما میخواهیم منشأ این جسم خالی بازی در مرکز دو سنگ باشد تا بتوانیم آن را بهراحتی spawn یا تخمریزی (زمانی که پرنده ما با آن برخورد میکند تولید مثل کرده و به جانهای آن اضافه میشود) کنیم. هنگامیکه آن را به درستی قرار دادیم، یک پوشه جدید به نام “prefabs” ایجاد میکنیم و این شی “Rocks” را به داخل پوشه میکشیم تا آن را به یک پیشساخته تبدیل کنیم.
با تمام کارهای انجام شده، میتوانیم شی «Rocks» را حذف کنیم و به سمت کدنویسی برویم.
ساختن بازیکن در آموزش ساخت بازی اندروید با unity
در این مرحله از آموزش ساخت بازی اندروید با Unity نوبت به ساخت بازیکن میرسد. چند چیز وجود دارد که میدانیم شی هواپیمای ما به آن نیاز خواهد داشت. میدانیم که به فیزیک و بعد نیاز دارد و میدانیم که با اشیا برخورد خواهد کرد. بنابراین، ما میدانیم که بازیکن ما باید بدنی سفتوسخت و برخورد دهنده داشته باشد. ما باید یک “Rigidbody2D” و یک “Circle Collider 2D” را به بازیکن خود اضافه کنیم.
در مرحله بعد، یک پوشه به نام “Scripts” ایجاد خواهیم کرد و یک اسکریپت C# جدید به نام “Player” میسازیم، سپس همان اسکریپت را روی بازیکن دراپ خواهیم کرد.
اکنون در این مرحله از آموزش ساخت بازی اندروید با Unity ما آمادهایم تا کد نویسی شی پرنده را انجام دهیم. اسکریپت Player را باز میکنیم و کار را شروع خواهیم کرد. ابتدا باید یک نیروی رو به بالا به هواپیما اضافه کنیم. ما میتوانیم این کار را با استفاده از روش “AddForce” روی بدنه سخت بازیکن انجام دهیم. در مرحله بعد، باید ورودی لمسی را دریافت کنیم. چند راه برای انجام این کار وجود دارد اما ما از “GetMouseButtonDown” استفاده میکنیم. ما میتوانیم از این روش استفاده کنیم زیرا قرار است در ویرایشگر آزمایش کنیم و Unity به «GetMouseButtonDown» اجازه میدهد تا برای لمسها نیز کار کند. اسکریپت نهایی ما به این صورت خواهد بود:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
public float tapForce = 500;
private Rigidbody2D playerRigidbody;
// Start is called before the first frame update
void Start()
{
playerRigidbody = GetComponent<rigidbody2d>();
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0))
{
playerRigidbody.AddForce(Vector2.up * tapForce);
}
}
}</rigidbody2d>
همهچیز تا اینجا ساده بود. حال ما با این کار به بدنه شی پرنده دسترسی خواهیم داشت و با لمس آن نیرویی بالابر به آن اعمال میشود. حال وقتی به ویرایشگر کد بازگشتیم میتوانیم ببینیم که پرنده ما میتواند پرواز کند.
حالا که بازیکن میتواند پرواز کند، باید موانعی را برای بازیکن ایجاد کنیم تا از برخورد به آنها جلوگیری کند.
دوره پیشنهادی: ساخت بازی با اسکرچ
ایجاد موانع
مشابه کاری که با بازیکن یا شی پرنده انجام دادیم، باید موانع را برخوردکننده طراحی کنیم. چیزی که در مورد سنگها یا موانع متفاوت خواهد بود این است که ما به فیزیک نیاز نداریم، فقط به یک برخورد دهنده نیاز داریم. به پوشه prefabs خود میرویم و روی rocks پیشساخته دو بار کلیک کنید. این به ما امکان میدهد عنصر پیشساخته را بدون اینکه در صحنه باشد ویرایش کنیم. در این بخش از آموزش ساخت بازی اندروید با Unity یک برخورد دهنده چندضلعی را به هر دو عنصر سنگ (نه به شی والد) اضافه میکنیم.
حال در این مرحله یک برچسب جدید به نام ” rocks” ایجاد و هر یک از عناصر rocks را تگ میکنیم.
حال بیایید یک اسکریپت جدید به نام Rocks ایجاد کنیم و این بار آن را به شی والد اختصاص دهیم.
در این اسکریپت فقط باید چند کار را انجام دهیم. ما نیاز داریم که سنگها با سرعت ثابت به سمت چپ حرکت کنند و وقتی از صفحه خارج شدند، به سادگی خودشان را حذف کنند. کد آن به شکل زیر است:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rocks : MonoBehaviour
{
public float speed = 5f;
public int lifetime = 5;
private void Start()
{
Invoke("DestroyThis", lifetime);
}
void Update()
{
transform.position += Vector3.left * speed * Time.deltaTime;
}
void DestroyThis()
{
Destroy(gameObject);
}
}
تولید مثل سنگها
در حالی که این کار باعث میشود سنگ به جلو حرکت کند، ولی همچنین ما به آن سنگها نیاز داریم تا در صحنه تولید شود. برای این کار یک شی خالی جدید بازی به نام RockSpawner ایجاد کرده و آن را در سمت راست صحنه خارج از نمای دوربین قرار میدهیم.
در این مرحله از آموزش ساخت بازی اندروید با Unity یک اسکریپت جدید به نام RockSpawner ایجاد کرده و آن را به شی RockSpawner اختصاص میدهیم.
تنها کاری که ما به این اسکریپت نیاز داریم این است که سنگ ها را با یک نرخ ثابت تولید مثل کنند. کد به شکل زیر خواهد بود:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RockSpawner : MonoBehaviour
{
public GameObject rocks;
public float frequency = 1;
private void Start()
{
InvokeRepeating("SpawnRocks", 1, frequency);
}
void SpawnRocks()
{
Vector3 randomPos = new Vector3(transform.position.x, Random.Range(-2, 2), transform.position.z);
Instantiate(rocks, randomPos, transform.rotation);
}
}
توجه داشته باشید که ما سنگهای تولید مثل شده را در موقعیتهای تصادفی y میفرستیم. ممکن است مجبور باشیم محدوده واقعی این را تغییر دهیم، اما در مورد تولید مثل سنگها تنوع بسیار بیشتری به ما میدهد. همچنین باید توجه داشته باشیم که ما در حال تولید مثل سنگها در موقعیت تولید مثل هستیم. اگر بخواهیم موقعیت دقیق سنگها را تغییر دهیم، باید این را در نظر داشته باشیم. اکنون به سادگی پیشساخته “rocks” را به فیلد “rocks” در RockSpawner اختصاص میدهیم و همهچیز آماده است.
حال وقتی بازی را اجرا میکنیم در طول مسیر سنگهایی وجود دراند که باید از برخورد با آنها جلوگیری کنیم.
منو و امتیازدهی
در این بخش از آموزش ساخت بازی اندروید با unity نوبت به ساخت سیستم امتیازدهی و منوی بازی است. راهی که میتوانیم در این بازی امتیاز بگیریم این است که هر بار که بازیکن از مانع عبور میکند، یک امتیاز فرضی اولیه را افزایش دهیم. برای انجام این کار، به پیشساخته سنگها برمیگردیم و یک برخورد دهنده جعبهای جدید بر روی شی والد که بین دو سنگ قرار میگیرد ایجاد میکنیم.
بسیار مهم است که این برخورددهنده را روی ماشه تنظیم کنیم که به بازیکن اجازه میدهد مستقیماً از آن عبور کند. این برخورد دهنده قرار نیست مانعی ایجاد کند. قرار است به عنوان یک ماشه عمل کند که وقتی بازیکن از آن عبور میکند، تشخیص میدهد که پرنده با موفقیت عبور کرده است. برای انجام این کار در کد، ابتدا به سراغ اسکریپت بازیکن میرویم و یک عدد صحیح ثابت جدید به نام «score» اضافه میکنیم.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour
{
public static int score = 0;
public float tapForce = 500;
private Rigidbody2D playerRigidbody;
void Start()
{
playerRigidbody = GetComponent<rigidbody2d>();
//Reset the score everytime the game restarts
score = 0;
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
playerRigidbody.AddForce(Vector2.up * tapForce);
}
}
}</rigidbody2d>
اکنون میتوانیم به اسکریپت Rocks برویم و هر بار که بازیکن وارد برخورددهنده جدید میشود، این متغیر امتیاز را افزایش دهیم. ما این کار را با استفاده از روش “OnTriggerEnter2D” انجام میدهیم.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Rocks : MonoBehaviour
{
public float speed = 5f;
public int lifetime = 5;
private void Start()
{
Invoke("DestroyThis", lifetime);
}
void Update()
{
transform.position += Vector3.left * speed * Time.deltaTime;
}
void DestroyThis()
{
Destroy(gameObject);
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.name == "Player")
{
Player.score++;
}
}
}
نمایش امتیاز
ما یک سیستم امتیازدهی داریم، اما اگر راهی برای دیدن آن در بازی نداشته باشیم، برای انجام این کار، باید یک شیء متنی به نام “Score” ایجاد کنیم که در بالای صفحه قرار میگیرد.
اکنون میتوانیم به سادگی اسکریپت Player امتیاز این شیء متنی را نمایش دهد.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Player : MonoBehaviour
{
public static int score = 0;
public float tapForce = 500;
public Text scoreText;
private Rigidbody2D playerRigidbody;
void Start()
{
playerRigidbody = GetComponent<rigidbody2d>();
score = 0;
}
void Update()
{
//The Score text updates every frame
scoreText.text = score.ToString();
if (Input.GetMouseButtonDown(0))
{
playerRigidbody.AddForce(Vector2.up * tapForce);
}
}
}</rigidbody2d>
هنگامی که ما شیء متنی “Score” را به قسمت “scoreText” در اسکریپت Player اختصاص میدهیم، میتوانیم امتیاز خود را در بازی ببینیم!
پیشنهاد مطالعه: آموزش ساخت بازی با سی شارپ + نقشه راه و منابع
شروع بازی
اینکه بازیکن بهمحض اجرای بازی شروع به بازی کند، تجربه را بد میکند و برای این کار به یک دکمه استارت یا شروع نیاز داریم. برای شروع بازی به یک متن خوشآمد گویی و یک دکمه نیاز داریم. یک تصویر جدید به نام “WelcomeText” ایجاد میکنیم و شی “textGetReady” را از پوشه UI به فیلد sprite میکشیم. همچنین باید مقیاس آن را طوری تنظیم کنیم که با صحنه مطابقت داشته باشد.
بعد در این مرحله از آموزش ساخت بازی اندروید با Unity، به یک دکمه نیاز داریم. یک شیء دکمه جدید به نام “StartButton” ایجاد کرده و آن را در مرکز قرار میدهیم تا متناسب با صحنه باشد. تصویر “buttonLarge” را از پوشه UI به قسمت “SourceImage” در شی “StartButton” جدید میکشیم. متن روی دکمه را تغییر داده و اندازه آن را تغییر خواهیم داد تا دکمه “Start” خوانده شود.
همه این عناصر باید با هم در یک شی گروهبندی شوند. به این ترتیب، میتوانیم همه آنها را در زمان شروع بازی غیرفعال کنیم. یک شی خالی جدید در داخل بوم ایجاد خواهیم کرد به نام “StartScreen” سپس متن جدید خود و دکمه فرزند آن شی را خواهیم ساخت.
اکنون برای اینکه دکمه شروع عمل کند، باید به اسکریپت Player خود بازگردیم و آن را به صورت زیر تغییر دهیم.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Player : MonoBehaviour
{
public static int score = 0;
public float tapForce = 500;
public Text scoreText;
private Rigidbody2D playerRigidbody;
void Start()
{
playerRigidbody = GetComponent<rigidbody2d>();
score = 0;
}
void Update()
{
//The Score text updates every frame
scoreText.text = score.ToString();
if (Input.GetMouseButtonDown(0))
{
playerRigidbody.AddForce(Vector2.up * tapForce);
}
}
}</rigidbody2d>
اکنون فقط لازم است همه چیز را در ویرایشگر به همدیگر متصل کنیم. دکمه Start به دو رویداد کلیک نیاز دارد. یکی از آنها تنظیم مقیاس زمانی روی 1 و دیگری غیرفعال کردن صفحه شروع خواهد بود.
شروع مجدد بازی
در حال حاضر، اگر در بازی به سنگی برخورد کنید، شی پرنده فقط از صفحه خارج میشود و بازی ادامه مییابد و این یک مشکل است.
برای رفع این مشکل، بیایید صفحهای را پیادهسازی کنیم که به ما اجازه میدهد در صورت باخت، بازی را ریستارت کنیم. اما قبل از اینکه این کار را انجام دهیم، به راهی فرایند عمل باخت نیاز داریم.. میتوانیم با بازگشت به اسکریپت Player و افزودن روش OnCollisionEnter2D این مشکل را برطرف کنیم.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Player : MonoBehaviour
{
public static int score = 0;
public float tapForce = 500;
public Text scoreText;
private Rigidbody2D playerRigidbody;
void Start()
{
playerRigidbody = GetComponent<rigidbody2d>();
score = 0;
Time.timeScale = 0;
}
void Update()
{
scoreText.text = score.ToString();
if (Input.GetMouseButtonDown(0))
{
playerRigidbody.AddForce(Vector2.up * tapForce);
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "rocks")
{
Time.timeScale = 0;
}
}
//Called Externally
public void SetGameTimeScale (float newScale)
{
Time.timeScale = newScale;
}
}</rigidbody2d>
همانطور که میبینید، تنها کاری که ما در هنگام برخورد با سنگ انجام میدهیم این است که بازه زمانی را به 0 برگردانیم و عملاً بازی را متوقف کنیم. اما ما میخواهیم کمی بیشتر از آن انجام دهیم و این شامل بازگشت به ویرایشگر و ایجاد یک صفحه منوی دیگر است. این بار ما یک صفحهنمایش سست میسازیم. این صفحه نمایش بسیار شبیه به صفحه شروع خواهد بود. من فقط StartScreen را کپی کردم، نام آن را تغییر دادم، متن دکمه را از “Start” به “Restart” تغییر دادم و یک تصویر متفاوت را عوض کردم. همچنین، پس از اتمام پیکربندی، این صفحه باید به طور پیشفرض غیرفعال شود.
یک تفاوت عمده بین دو صفحهنمایش، کاری است که دکمه راهاندازی مجدد انجام میدهد. ما میخواهیم که بازی را به طور کامل بازنشانی کند. برای انجام این کار، بیایید یک شی بازی خالی جدید به نام “LevelManager” ایجاد کنیم و یک اسکریپت C# جدید با همان نام متصل به این شی ایجاد کنیم.
این یک اسکریپت بسیار ساده خواهد بود که فقط یک متد عمومی دارد. این متد برای ریست کردن بازی خواهد بود و با دکمه راهاندازی مجدد فراخوانی میشود.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class LevelManager : MonoBehaviour
{
public void ResetGame()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
}
این یک متد ساده اما کلی است که صحنه فعلی را بازنشانی میکند. ما این کار جدا از پروفایل ساخت صحنه فعلی انجام میدهیم برای این هدف به File -> Build Settings میرویم و روی “Add Open Scenes” کلیک خواهیم کرد تا صحنه فعلی خود را در پروفایل ساخت قرار دهیم.
آخرین کاری که در این آموزش ساخت بازی اندروید با Unity باید انجام دهیم این است که هنگام برخورد بازیکن با سنگ، صفحه سست را فعال کنیم و مطمئن شویم که دکمه تنظیم مجدد، متد تنظیم مجدد را فراخوانی میکند. برای فعال کردن صفحه سست در هنگام برخورد، اسکریپت Player نیاز به دسترسی به آن دارد و باید آن را در متد OnCollisionEnter2D فعال کند.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Player : MonoBehaviour
{
public static int score = 0;
public float tapForce = 500;
public Text scoreText;
public GameObject looseScreen;
private Rigidbody2D playerRigidbody;
void Start()
{
playerRigidbody = GetComponent<rigidbody2d>();
score = 0;
Time.timeScale = 0;
}
void Update()
{
scoreText.text = score.ToString();
if (Input.GetMouseButtonDown(0))
{
playerRigidbody.AddForce(Vector2.up * tapForce);
}
}
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.tag == "rocks")
{
looseScreen.SetActive(true);
Time.timeScale = 0;
}
}
//Called Externally
public void SetGameTimeScale (float newScale)
{
Time.timeScale = newScale;
}
}</rigidbody2d>
اکنون، تنها کاری که باید انجام دهیم این است که مطمئن شویم همهچیز به زمینه مناسب خود اختصاص داده شده است. دکمه بازنشانی باید متد “ResetGame” را فراخوانی کند و بازیکن باید از طریق صفحه به بازی دسترسی داشته باشد.
خروجی نهایی آموزش ساخت بازی اندروید با unity چیزی شبیه این است:
سخن پایانی
در این مطلب از مکتوب ما در رابطه با ساخت بازی با یونتی و ابعاد مختلف آن به عنوان یک موتور بازی سازی قوی، توضیحاتی ارائه دادیم. همچنین یک نمونه بازی کامل را با آن پیادهسازی کردیم. امیدوارم که این آموزش ساخت بازی اندروید با unity برای شما مفید واقع شده باشد.
لینک اصلی این آموزش برای دسترس به سورس کد اصلی: