آموزش سی شارپ در یونیتی – از مبتدی تا ساخت اولین بازی
Unity یکی از قدرتمندترین و پرکاربردترین ابزارهایی است که توسعهدهندگان برای ساخت بازیهای خود استفاده میکنند. دلیل اصلی بهکارگیری یونیتی، سادگی، انعطافپذیری و قدرت بالای آن است. یونیتی از زبان برنامه نویسی قدرتمندی به نام سی شارپ استفاده میکند. با کمک سی شارپ، برنامه نویسان میتوانند تمام ایدههای خود را در دنیای بازیها به واقعیت تبدیل کنند. بنابراین، مطالعه مطالب و مشاهده فیلمهای مربوط به آموزش سی شارپ در یونیتی یکی از کارهای مهمی است که افراد علاقهمند به اشتغال در این حوزه باید جدی بگیرند. با یادگیری ساخت بازی با سی شارپ و استفاده از یونیتی میتوانید، بازیهای بسیار هیجانانگیز و حرفهای تولید کنید.
- خواهید توانست محیط یونیتی را برای توسعه بازی راهاندازی کنید.
- کاربرد C# در اسکریپتنویسی و منطق بازی را میآموزید.
- ساختار و چرخه عمر GameObjectها در یونیتی را یاد میگیرید.
- میآموزید کنترلهای اساسی و مکانیک اصلی بازی را کدنویسی کنید.
- با مفاهیم مهم برنامهنویسی شیگرا و اصول پایه C# آشنا میشوید.
- یاد خواهید گرفت پروژه یک بازی ساده را از صفر پیادهسازی کنید.


در این مطلب از مجله فرادرس، مسائل مربوط به آموزش سی شارپ در یونیتی را بیان کردهایم. ابتدا یونیتی را تعریف کرده و دلایل استفاده از سی شارپ در این موتور بازیسازی را بیان کردیم. سپس روش نصب و راهاندازی یونیتی را نشان دادیم. در ادامه به بررسی بعضی از اصول پایه برنامه نویسی سی شارپ پرداختهایم. همچنین مفهوم اسکریپت نویسی با سی شارپ در یونیتی را نیز توضیح دادهایم. در پایان هم با مثال سادهای، نحوه استفاده از سی شارپ در یونیتی را بررسی کرده و بازی کوچکی را پیادهسازی کردیم.
چرا از سی شارپ در یونیتی استفاده میشود؟
موتور بازیسازی یونیتی از زبان برنامه نویسی سی شارپ پشتیبانی میکند. میتوان گفت، زبان سی شارپ مشهورترین زبان برنامه نویسی است که برای توسعه بازیها در یونیتی به کار برده میشود. سی شارپ توسط مایکروسافت تولید شده و به عنوان «زبان برنامه نویسی شیء گرا» (Object-Oriented Programming Language | OOP) شناخته میشود. از این زبان برای ساخت اپلیکیشنهای بسیار زیادی از جمله بازیهای ویدئویی استفاده میشود. بنابراین، اگر برنامه نویسان از قبل با برنامهنویسی شیءگرا کار کرده باشند، سی شارپ میتواند گزینهای بسیار مناسب برای ساخت بازی در یونیتی باشد.
زبان برنامه نویسی سی شارپ، از ویژگیهای متنوعی مانند کلاسها، پلی مورفیسم، وراثت و اشیا پشتیبانی میکند. در ضمن سینتکس ساده و تمیزی دارد. این مسئله یادگیری آن را آسانتر کرده است. قبل از نصب یونیتی لازم است که عملیات نصب و راهاندازی سی شارپ بر روی ویژوال استودیو را به پایان رسانده باشیم.
موتور بازیسازی یونیتی از «Mono» استفاده میکند. Mono نسخهای از «Microsoft’s .NET framework» است که بر روی پیشتر پلتفرمها کار میکند. زبان برنامه نویسی اصلی Mono سی شارپ است. در نتیجه، تمام کتابخانههای یونیتی با زبان سی شارپ نوشته شدهاند.
از طرف دیگر، یونیتی دائما ویژگیهایی جدیدی اضافه میکند. بنابراین با استفاده از سی شارپ حتی میتوانیم کارهای بیشتری نیز بکنیم. خود یونیتی هم اعلام کرده است که سی شارپ زبان اصلی و رسمی آن است. در نتیجه سی شارپ به یکی از بهترین زبانهای برنامه نویسی برای توسعه بازی در یونیتی تبدیل شده است. با توجه به این مسائل میتوان تشخیص داد که چرا آموزش سی شارپ در یونیتی مهم است.
مزیتهای آموزش سی شارپ در یونیتی
از سی شارپ در یونیتی برای تعریف رفتارهای اشیا، کنترل جریان بازی و تعامل با محیط استفاده میشود. آموزش سی شارپ در یونیتی مزیتهای زیادی برای توسعهدهندگان دارد. در فهرست زیر، چند مورد از مهمترین مزیتهای آموزش سی شارپ برای استفاده در یونیتی را نوشتهایم.
- یادگیری آسان: سی شارپ با سینتکس واضح و کدهای سازمانیافتهاش شناخته شده است. این ویژگیها باعث شدهاند که زبان ایدهآلی برای ورود افراد تازهکار به صنعت بازیسازی باشد.
- قدرت و انعطافپذیری: علیرغم سادگی آموزش سی شارپ، این زبان به طرز شگفتانگیزی قدرتمند است. سی شارپ از مفاهیم برنامه نویسی پیشرفتهای مانند کپسوله سازی، وراثت و پلیمورفیسم پشتیبانی میکند. استفاده از این مفاهیم برای ساخت بازیهای پیچیده ضروری است.
- جامعه کاربری قوی و مستندات عالی: یونیتی جامعه کاربری بزرگ و فعالی دارد. وجود چنین جامعهای در کنار مستندات جامع و کامل، باعث شده که آموزش سی شارپ در یونیتی و عیبیابی مشکلات آن سادهتر شود.
- تعامل ساده و قوی با یونیتی: اسکریپتهای سی شارپ به خوبی با موتور یونیتی تعامل میکنند. در نتیجه توسعهدهندگان میتوانند به سادگی اشیا بازی و صفات و رفتارهای آنها را دستکاری کنند.

در بخش بعد موتور بازیسازی یونیتی را به شکل کاملتری تعریف کردهایم.
یونیتی چیست؟
یونیتی محیط کاربرپسندی است که برای توسعه محصولات گرافیکی و به طور خاص بازیها به کار برده میشود. این محیط دارای موتور گرافیکی چندپلتفرمی قدرتمند است. پردازش گرافیکی بیدرنگ سهبعدی یونیتی به توسعهدهندگان کمک میکند که به سرعت نتیجه کارهای خود را ببینند و در صورت نیاز اصلاحات مورد نظر خود را در همان لحظه اعمال کنند.
یونیتی ابزاری مناسب برای همه کسانی است که میخواهند بازیهای سهبعدی یا برنامههایی با گرافیک بالا برای موبایل، دسکتاپ، وب یا کنسولها بسازند. یونیتی برای استفاده توسط افراد تازه کار به اندازه کافی ساده بوده و همچنین برای بهکارگیری توسط حرفهایها به اندازه کافی قدرتمند است.

مهمترین مزیتهای یونیتی
به غیر از استفاده از زبان سی شارپ، یونیتی مزیتهای دیگری نیز دارد. وجود این نکات مثبت، باعث شده یونیتی به یکی از مشهورترین گزینهها در بین موتورهای بازیسازی، تبدیل شود. در فهرست پایین، مهمترین مزیتهای یونیتی را بیان کردهایم.
- چند پلتفرمی بودن: یکی از بهترین ویژگیهای یونیتی این است که به توسعهدهندگان اجازه میدهد بازی مورد نظر خود را فقط یکبار بسازند. بعد از آن به راحتی میتوانند این محصول را بر روی پلتفرمهای مختلف عرضه کنند. برای مثال میتوانیم به پلتفرمهایی مانند ویندوز، اندروید، «MacOS» و «iOS» و غیره اشاره کنیم.
- رابط کاربری شهودی: ویرایشگر یونیتی، رابط کاربر پسندی دارد. این رابط گرافیکی، امکان استفاده از آن را برای کاربران تازهکار ساده کرده است. در عین حال، ابزارهای قدرتمندی هم توسط یونیتی برای استفاده کاربران حرفهای آماده فراهم شدهاند.
- «فروشگاه المانهای کاربردی» (Asset Store): یونیتی فروشگاه بزرگی به نام « Asset Store» دارد. در این فروشگاه میتوان موادی با جنسهای مختلف، مدلها، انیمیشنها و قالبهای پروژهای از پیش تکمیل شدهای را پیدا کرد. استفاده از این مصالح به ساخت سریعتر بازی کمک میکند.
روش نصب یونیتی
بعد از آشنا شدن با یونیتی، و قبل از پرداختن به آموزش سی شارپ در یونیتی، باید با روش نصب این نرمافزار را نیز یاد بگیریم. برای این کار، بهتر است که جدیدترین نسخه رایگان آن را از وبسایت رسمی یونیتی دانلود کنیم. به این منظور باید از سایت (+) استفاده کنید.

همینطور که در تصویر بالا مشخص است، ابتدا باید «Unity Hub» را دانلود کنیم.

بعد از آن، Unity Hub را راهاندازی کرده و عملیات اصلی نصب یونیتی را شروع میکنیم.

بعد از باز شدن Unity Hub به تب «Install» میرویم. در این تب باید یکی از ادیتورهای مورد نظر خود را انتخاب کرده و نصب کنیم.

بهتر است که در این بخش، همان ویرایشگری را انتخاب کنیم که خود نرمافزار توصیه میکند. سپس بر روی دکمه Install کلیک میکنیم.

همینطور که در تصویر بالا مشاهده میکنید، گزینهای برای نصب ویژوال استودیو هم وجود دارد. اگر این IDE از قبل بر روی کامپیوتر نصب نشده باشد، باید آن را هم انتخاب کرده و نصب کنیم.

بعد از نصب یونیتی و ویژوال استودیو - البته در صورت نیاز - باید پکیج مخصوص افزونههای یونیتی را بر روی ویژوال استودیو نصب کنیم. بنابراین بخش «نصب کننده ویژوال استدیو» (Visual Studio Installer) را باز کرده و بر روی گزینه «Modify» کلیک میکنیم. در تصویر زیر این پکیج را علامت زدهایم.

در پنجره باز شده بر روی افزونه «Game development with Unity» کلیک کرده و آن را انتخاب میکنیم. سپس بر روی دکمه Modify کلیک میکنیم.
بعد از مرحله آخر، یونیتی با موفقیت بر روی سیستم نصب شده و آماده استفاده است. اکنون میتوانیم از رابط کاربری یونیتی استفاده کنیم.
در ادامه مطلب، برای آموزش سی شارپ در یونیتی میخواهیم پروژه سادهای را اجرا کنیم.
- ابتدا Unity Hub را باز کرده و بر روی گزینه «New Project» کلیک میکنیم.

- اگر بخواهیم که پروژه سهبعدی ایجاد کنیم، باید در پنجره باز شده، گزینه «3D» را انتخاب کنیم. بعد از آن باید نامی را هم به پروژه خود اختصاص بدهیم. در این مطلب، از نام «Demo» استفاده کردهایم. بعد از انتخاب نام، بر روی دکمه «Create project» در پایین کلیک میکنیم.

اکنون باید چند ثانیه صبر کنیم، تا ادیتور یونیتی، پروژه جدیدی را شروع کند.

وقتی که پروژه جدید شروع شد با صحنهای مانند تصویر پایین روبهرو میشوید. در این بخش میتوانید با تمام عناصر رابط کاربری یونیتی یک به یک کار کنید.

یادگیری یونیتی و انجام پروژه های مختلف
صنعت ساخت بازیهای رایانهای، یکی از صنایع رو به رشد در سطح جهان است. این صنعت با گردش مالی بسیار زیاد، از بسیاری از دیگر صنایع حوزه IT پیشی گرفته است. در کشور ما نیز شرکتهای بسیاری به سمت این صنعت حرکت کردهاند. یکی از بهترین ابزارها برای ساخت بازی، موتور بازیسازی یونیتی است. توسعهدهندگان با کمک این موتور بازیسازی میتوانند بازیهای دوبعدی و سهبعدی، اپلیکیشنهای موبایل، تجربیات واقعیت مجازی و واقعیت افزوده و بسیاری از پروژههای تعاملی دیگر را بسازند.

فرادرس با هدف آموزش سی شارپ در یونیتی، مجموعهای از فیلمهای آموزشی مختلف را تهیه و منتشر کرده است. تمام این فیلمها ساختار منسجمی داشته و مطالب را به صورت کامل و گامبهگام آموزش میدهند. البته فیلمهای این مجموعه آموزشی فقط منحصر به سی شارپ نیستند و با تمرکز بر روی یونیتی تولید شدهاند. اما به هر حال، یونیتی به شکل یکپارچه و بسیار سادهای با زبان برنامه نویسی سی شارپ کار میکند. به همین دلیل پیشنهاد میکنیم برای گرفتن نتیجه بهتر، آموزشهای مقدماتی مربوط به سی شارپ را نیز تماشا کرده باشید. فرادرس در انتهای بعضی از این فیلمها به کاربران خود، مدرک دوزبانه پایان دوره هم میدهد.
- فیلم آموزش پروژه محور یونیتی درباره ساخت بازی رانندگی جهان باز در فرادرس
- فیلم آموزش پروژه محور یونیتی، ساخت بازی ماجرایی اندرویدی در Unity همراه با اعطای گواهینامه در فرادرس
- فیلم آموزش پروژه محور یونیتی درباره مسیریابی و ناوبری در Unity در فرادرس
- فیلم آموزش یونیتی، بازی سازی تحت شبکه با Netcode در Unity، دوره مقدماتی همراه با اعطای گواهینامه در فرادرس
آشنایی با موارد لازم برای آموزش سی شارپ در یونیتی
آشنایی با اصول پایه زبان برنامه نویسی سی شارپ برای توسعه حرفهای بازی در یونیتی ضروری است. در این بخش از مطلب، به شکل کوتاه، مفاهیم بنیادینی مانند متغیرها، انواع داده و ساختارهای پایه را معرفی کردهایم. همه این مفاهیم برای برنامه نویسی سی شارپ در یونیتی به کار برده میشوند.
شناخت متغیرها و انواع داده
از انواع متغیر در سی شارپ برای ذخیرهسازی اطلاعات استفاده میشود. هر متغیری دارای نوع، نام و مقدار است. نوع متغیرها تعیین میکند که چه نوع دادهای را میتوان در آنها ذخیره کرد.
انواع داده
در فهرست زیر، چند مورد از پرکاربردترین انواع داده در سی شارپ را نام بردهایم.
- int: از این نوع برای ذخیرهسازی اعداد صحیح استفاده میشود.
- float: از این نوع برای ذخیرهسازی اعداد اعشاری با ممیز شناور استفاده میشود.
- string: این نوع هم برای ذخیرهسازی توالی از کاراکترها به کار برده میشود.
- bool: نوع «بولی» یا Boolean برای ذخیرهسازی مقادیر «صحیح» (True) و «غلط» (False) به کار برده میشود.
تعریف متغیرها
برای تعریف متغیر در سی شارپ باید نوع و نام آن متغیر را مشخص کنیم. در زمان تعریف متغیر تخصیص مقدار به آن اختیاری است. در کادر زیر، چند نمونه متغیر مختلف را تعریف و مقداردهی اولیه کردهایم.
عبارتهای شرطی
عبارتهای شرطی به توسعهدهندگان کمک میکنند تا بسته به شرایط مختلف، از کدهای متفاوتی استفاده کنند. برای مثال میتوانیم به ساختار «If-Else» اشاره کنیم. If-Else پایهایترین عبارت شرطی در سی شارپ است.
حلقهها
از حلقهها برای تکرار رفتار مشخصی استفاده میشود. این رفتارها معمولا تا زمانی تکرار میشوند که شرط خاصی برقرار شود. برای مثال میتوانیم به حلقه «for» اشاره کنیم. عبارت for حلقه سادهای است که رفتار خاصی را به تعداد مشخصی انجام میدهد.
توابع و متدها
توابع با نام متد هم شناخته میشوند. این ساختارها بلوکهای از پیشتعریف شدهای از کد هستند. توابع وقتی بعد از فراخوانی شدن، وظیفه خاصی را اجرا میکنند. در کادر زیر، نمونه تابع سادهای را در زبان سی شارپ پیادهسازی کردهایم.
برای فراخوانی توابع در سی شارپ باید از نام آنها استفاده کنیم. بعد از نام تابع لازم است که علامتهای پرانتز باز و بسته قرار بدهیم.
درک این مفاهیم پایه در سی شارپ، اولین قدم برای ساخت منطق بازیهای پیچیده در یونیتی است. هرچه که با این اصول پایه بیشتر آشنا شویم، متوجه میشویم که آنها به درک بهتر مفاهیم مشکل در توسعه بازیهای کمک میکنند.

اسکریپت نویسی سی شارپ در یونیتی
یکی از مهمترین مراحل آموزش سی شارپ در یونیتی درک اسکریپتها و روش ادغام آنها با فرایند توسعه بازی است. یونیتی از چند ایده کلیدی و توابع مخصوص در اسکریپتها استفاده میکند. یونیتی با کمک این ابزارها روش کار بازی و رفتارهای درون بازی را مدیریت میکند.
کلاس MonoBehaviour و طول عمر اشیا در یونیتی
کلاس «MonoBehaviour»، کلاس پایهای است که تمام اسکریپتهای یونیتی از آن مشتق شدهاند. این کلاس مجموعهای از متدهای «رویدادمحور» (Event-Driven) را فراهم کرده است. این متدها توسط یونیتی در طول چرخه عمر اشیا درون بازی، فراخوانی میشوند.
در فهرست زیر، چند مورد از متدهای اصلی کلاس MonoBehaviour را معرفی کردهایم.
- Awake(): این تابع وقتی فراخوانی میشود که نمونهای از اسکریپت بارگذاری شود.
- Start(): این تابع قبل از بهروزرسانی اولین فریم در بازی فراخوانی میشود، یعنی قبل از شروع بازی. اغلب برای مقداردهی اولیه به عناصر بازی به کار برده میشود.
- Update(): تابع Update() به ازای هر فریم از بازی یکبار فراخوانی میشود. این تابع، گزینه بسیار مناسبی برای پیادهسازی منطق بازی است. زیرا قواعد منطقی معمولا باید به شکل متوالی بررسی شوند.
تعامل با اشیا در بازی
در یونیتی همه چیزهای موجود در صحنه به عنوان اشیا بازی در نظر گرفته میشوند. با کمک اسکریپتها رفتار این اشیا را تعریف میکنیم.
اشیا درون بازی از بخشهایی به نام «Component» ساخته شدهاند. به عنوان مثال میتوان به «Transform» و «Rigidbody» یا اسکریپتهای نوشته شده توسط توسعهدهنده اشاره کرد. هر کدام از این بخشها یک کامپوننت هستند. با استفاده از سی شارپ میتوان این کامپوننتها را تغییر داد یا مدیریت کرد.
حتی در زمان اجرای بازی هم میتوان از روی اشیا بازی نمونهسازی کرد. معمولا این ترفند برای ساخت یا جابهجایی دشمنهای بازی یا تولید گلوله و غیره به کار برده میشود.
توابع مدیریت رویداد در یونیتی
یونیتی چندین تابع مخصوص را برای مدیریت رویدادها فراهم کرده است. این توابع، زمانی اجرا میشوند که اتفاقات مشخصی در طول بازی رخ بدهند.
رویدادهای مربوط به برخوردهای فیزیکی
توابع OnCollisionEnter و OnCollisionExit و OnCollisionStay برای شناسایی و پاسخ به «برخوردهای فیزیکی» (Collisions) استفاده میشوند. به این نوع برخوردها، «رویدادهای برخورد» یا (Collision Events) گفته میشود.
مدیریت دادههای ورودی
نحوه صحیح نوشتن اسکریپتها یکی از مهمترین بخشهای آموزش سی شارپ در یونیتی است. برای پیادهسازی بازیهای تعاملی، بسیار مهم است که اسکریپتهای مربوط به مدیریت دادههای ورودی به درستی نوشته شوند. برای رسیدن به این هدف هم باید دادههای ورودی به درستی تشخیص داده شوند. یونیتی انجام این فرایند را با کمک توابعی مانند Input.GetKeyDown سادهتر کرده است.
یادگیری این مفاهیم برای نوشتن اسکریپتها در یونیتی و ایجاد ساختارهای پاسخگو و پویا در بازیسازی ضروری است. انعطافپذیری سی شارپ به توسعهدهندگان کمک میکند تا تجربهای منحصربهفرد از گیمپلی در یونیتی خلق کنند. با استفاده از این ابزارها، میتوانیم بازیهای متنوعی برای پلتفرمهای دوبعدی و سهبعدی طراحی و تولید کنیم.

مدیریت مکانیزم بازی با کمک سی شارپ
همزمان با آموزش سی شارپ در یونیتی باید به نقش آن در جذابتر کردن بازی نیز توجه داشته باشیم. سی شارپ فقط برای جابهجا کردن اشیا و دادن ویژگی پویایی به آنها استفاده نمیشود. بلکه از آن برای ساخت دنیای واقعی استفاده میشود. این دنیا باید به رفتارهای بازیکن هم واکنش نشان بدهد.

آموزش ساخت بازی با سی شارپ شامل مرحلههای مختلفی است. پیادهسازی رفتارهای کاراکتر بازیکن یکی از این مراحل است. به منظور آموزش جامع تکنیکهای مختلف، پیشنهاد میکنیم که فیلم آموزش ساخت بازی با سی شارپ را از فرادرس مشاهده کنید. برای کمک به مخاطبان مجله لینک این فیلم را در پایین نیز قرار دادهایم.
پیاده سازی کنترلهای بازیکن
یکی از قدمهای مهم برای زنده کردن محیط بازی این است که بازیکن بر روی اشیا بازی کنترل داشته باشد. در کد زیر، نمونهای از این قابلیت پیادهسازی شده است. توسعهدهندگان میتوانند این امکان را فراهم کنند تا بازیکن با استفاده از دکمههای صفحهکلید اشیا را جابهجا کند.
در اسکریپت بالا، از تابع Input.GetAxis برای گرفتن دادههای ورودی از کیبورد یا گیمپد استفاده کردهایم. سپس موقعیت شیء مورد نظر را بر اساس با دادههای دریافت شده بهروزرسانی کردیم.
پیادهسازی حرکات مبتنی بر فیزیک با کمک Rigidbody
از کامپوننت Rigidbody در یونیتی برای القای حس واقعی بودن فضای بازی استفاده میشود. این کار با کمک قوانین فیزیک انجام میشود. کامپوننت Rigidbody باعث میشود اشیای بازی مطابق با قوانین فیزیک رفتار کنند.
در کادر پایین، روش استفاده از نیرو در Rigidbody را برای جابهجایی اشیا بازی، پیادهسازی کردهایم.
در مثال بالا، از تابع AddForce در متد FixedUpdate استفاده شده است. این تابع برای اعمال پیوسته نیرو به Rigidbody به کار میرود. در نتیجه وقتی بازیکن دکمه W را فشار دهد، شیء مورد نظر به جلو حرکت میکند.
تعامل با محیط و اشیا
دستورات مربوط به تعامل کاربر با بازی فقط به حرکات بازیکن محدود نمیشوند. اشیا موجود در دنیای بازی، هم میتوانند با یکدیگر تعامل داشته باشند و هم با محیط انجام کار.
کشف برخوردهای بین اشیا و پیادهسازی پاسخ مناسب در زمان برخورد، یکی از بخشهای اصلی در ساختار بازیهای کامپیوتری است.
این اسکریپت به دنبال اشیائی میگردد که تگ Collectible دارند. وقتی بازیکن هر کدام از این اشیا را لمس کند، آن شیء ناپدید میشود. از چنین تکنیکی میتوان برای شمارش امتیازات یا تکمیل کردن مرحلههای بازی استفاده کرد.

ساخت محیطهای Responsive و پویا
برای اینکه بازیها سرگرم کننده و هیجانانگیز شوند، فضای آنها باید زنده به نظر برسد. توسعهدهندگان برای رسیدن به این هدف، کارهای مختلفی انجام میدهند. در فهرست زیر چند مثال از کارهای مربوط به پویایی محیط را نوشتهایم.
- وجود تغییرات در آبوهوای محیط بازی
- متفاوت بودن رویدادهای شروع وقتی که بازیکن کاری خاصی را انجام میدهد.
- تغییر محیط بازی با گذشت زمان
در کادر پایین، روش سادهای را برای شروع رویداد خاصی پیادهسازی کردهایم. این رویداد وقتی اجرا میشود که بازیکن وارد ناحیه مشخصی از بازی شود.
این رویداد میتواند چیزی مانند باز شدن در یا فاش شدن راز خاصی باشد. در اسکریپت بالا از تابع OnTriggerEnter برای تشخیص زمانی استفاده میشود که بازیکن وارد منطقه مورد نظر شده است. از نتیجه این تابع میتوان برای شروع رویداد دیگری در بازی استفاده کرد.
بعد از گذراندن دورههای آموزش سی شارپ در یونیتی میتوانید بازیهایی بسازید که جالب بوده و پُر از ویژگیهای بامزه هستند. کارهای بسیار زیادی میتوانید بکنید. تنها محدودیت شما خلاقیت و مهارتهای مربوط به کار با ابزارهاست.
ویژگی های پیشرفته سی شارپ برای توسعه بازی
هرچقدر که در استفاده از یونیتی و سی شارپ حرفهایتر شوید، میتوانید مباحث بسیار پیشرفتهتری را هم بیاموزید. در فهرست زیر چند مورد از این تکنیکها را نام بردهایم.
- اضافه کردن کاراکترهای تحت کنترل توسط کامپیوتر، هوش مصنوعی
- استفاده از قوانین فیزیک برای واقعیتر نشان دادن حرکت اشیا
- تعامل هرچه هوشمندانهتر بازیکن با بازی
- شبکهسازی و بازی چندنفره
البته زبان سی شارپ ویژگیهای پیشرفته و کاربردهای متنوعی دارد. با توجه به شرایط محصول خود - چه بازی کامپیوتری باشد و چه نرمافزارهای دیگر - میتوانیم از آنها استفاده کنیم. برای آشنایی با انواع کاربرد زبان برنامه نویسی #C میتوانید مطلب مربوط به آن را در مجله فرادرس مطالعه کنید.
در ادامه این بخش، هر کدام از تکینکهای بالا را به شکل خلاصه توضیح دادهایم.
امکان استفاده از هوش مصنوعی
هوش مصنوعی با ساخت «کاراکترهای غیربازیکنی» (Non-Player Characters | NPCs) و شبیهسازی رفتارهای هوشمندانه آنها میتواند کیفیت بازی را بیشتر کند.
در ادامه، روش سادهای را برای پیادهسازی حرکت هوش مصنوعی ارائه کردهایم. در این مثال، کاراکتر دشمن، کاراکتر بازیکن را تعقیب میکند.
در اسکریپت بالا، کاراکتر دشمن به شکل دائم به سمت موقعیت قرارگیری بازیکن حرکت میکند. در واقع رفتار تعقیب و گریز را شبیهسازی کردیم.
مدیریت شبیه سازی قوانین فیزیک
سیستم مدیریت قوانین فیزیک در یونیتی کمک میکند که شبیهسازی بسیار واقعگرایانهتری از تعاملات فیزیکی درون فضای بازی بوجود بیاوریم.
برای مثال با استفاده از Rigidbody میتوانیم عملیات پَرِش بازیکن را به شکل بسیار واقعیتری پیادهسازی کنیم. به عنوان نمونه در کد پایین، اسکریپت سادهای درباره استفاده از Rigidbody نوشتهایم.
اسکریپت بالا طوری طراحی شده که بازیکن بتواند بپرد. اما پریدن بازیکن مشروط بر این است که قبلا در حال پرش یا سقوط نبوده باشد. در واقع این اسکریپت از «پرش دوباره» (Double Jump) در هوا جلوگیری میکند.

تعاملات پیشرفته با بازیکن
تقویت تعاملات بازیکن میتواند به شکل قابل توجهی کیفیت تجربهی کاربری بازی را افزایش دهد. این مسئله بازی را واقعیتر و جذابتر میکند. برای نمونه میتوانید اسکریپتی بنویسید که به بازیکنها برای تعامل با اشیاء موجود در دنیای بازی کمک میکند.
در اسکریپت بالا از متد OnMouseDown استفاده کردهایم. این متد وقتی اجرا میشود که بازیکن بر روی هر کدام از اشیا موجود در بازی کلیک کند. استفاده از OnMouseDown یکی از سادهترین روشها برای فراهم کردن امکان تعامل بازیکنان با اشیای درون بازی است.
شبکه سازی و بازی چندنفره
آموزش سی شارپ در یونیتی برای ساخت بازیهای چند نفره، شامل یاد گرفتن کنترل شبکه و هماهنگی عملکرد بازیکنان نیز است. با این کارها مطمئن میشویم که بازی برای همه افراد به شکل یکسان پیش میرود. یونیتی برای انجام این کارها نیز ابزارهای مخصوصی دارد. با این حال، این عملیات پیچیده است و نیاز به درک درست از روش کار شبکههای کامپیوتری نیز دارد.
در اسکریپت بالا، isLocalPlayer متغیری است که مقادیر True یا False را نگهداری میکند. در واقع این متغیر از نوع بولین است. این متغیر میگوید که آیا کاراکتر موجود در بازی متعلق به بازیکنی است که از این کامپیوتر استفاده میکند یا نه. این مسئله در بازیهای چندنفره ساخته شده توسط یونیتی، اهمیت زیادی دارد. بازیکنان با کمک این شرط، فقط کاراکترهای متعلق به خود را کنترل میکنند.
با کمک بخشهای پیشرفته یونیتی، توسعهدهندگان میتوانند بازیهای بهتری بسازند. بازیهای ساخته شدهای که از این اصول پیروی میکنند، در چشم بازیکنان سرگرمکنندهتر، هوشمندانهتر و هیجانانگیزتر هستند.
فیلمهای آموزشی فرادرس برای یادگیری سی شارپ
زبان برنامه نویسی #C، با اینکه ویژگیهای قدرتمندی دارد اما فرایند یادگیری آن هم ساده است. این مسئله باعث شده به انتخابی مناسب برای افراد تازهکار و برنامهنویسان حرفهای تبدیل شود. سی شارپ در حوزههای متنوعی مانند بازیسازی، ساخت نرمافزارهای کاربردی، برنامههای تحت وب و غیره بازار کار دارد. بنابراین افراد زیادی علاقهمند به یادگیری این زبان برنامه نویسی هستند. فرادرس، فیلمهای بسیار خوبی برای آموزش سیشارپ تهیه کرده است. فیلمهای آموزشی فرادرس، با کمک اساتید مجرب و به صورت با کیفیت تولید شدهاند.
- فیلم آموزش کاربردی برنامه نویسی سی شارپ در فرادرس
- فیلم آموزش شی گرایی در سی شارپ با فرادرس
- فیلم آموزش «ویژوال استودیو» (Visual Studio) درباره خطایابی کدهای سی شارپ در فرادرس
- فیلم آموزش ساخت بازی با سی شارپ C# در فرادرس
- فیلم آموزش یونیتی، بازی سازی تحت شبکه با Netcode در Unity، دوره مقدماتی همراه با اعطای گواهینامه در فرادرس
فرادرس تلاش کرده است تا در فیلمهای آموزشی خود تمام بخشهای مربوط به زبان سی شارپ را پوشش دهد. در فهرست بالا، چند فیلم از «مجموعه آموزشی سی شارپ» را معرفی کردهایم.

آموزش سی شارپ در یونیتی با ساخت بازی ساده
تا به اینجای کار، نسخه رایگان یونیتی را دانلود کرده و بر روی ویژوال استودیو راهاندازی کردیم. البته نسخه پولی این نرمافزار هم موجود است اما همین نسخه رایگان تواناییهای بسیار زیادی دارد. نام کامل یونیتی، «Unity 3D» است. هرچند با کمک آن میتوان به سادگی بازیهای دوبعدی هم ایجاد کرد. در این بخش از مطلب با کمک یونیتی و زبان برنامه نویسی سی شارپ، روش ساخت بازی سادهای بررسی کردهایم.
مرحله اول: ساخت پروژه جدید
اول باید نرمافزار یونیتی را باز کنیم. صفحه مربوط به خوشامدگویی آن را میبندیم. این صفحه به صورت پیشفرض با هربار باز شدن یونیتی ظاهر میشود. سپس در منو بر روی «File» کلیک کرده و بعد از آن گزینه «New Project» را انتخاب میکنیم. در این صفحه میتوانیم محل ذخیرهسازی پروژه را هم انتخاب کنیم. نام دلخواهی را به پروژه خود اختصاص میدهیم. قبل از کلیک کردن بر روی دکمه «Create» به تصویر زیر نگاه کنید. سعی کنید تنظیمات صحیح را از روی این عکس، پیادهسازی کنید. بهتر است همه پروژههای یونیتی را در پوشه مشخص و ثابتی قرار دهیم.

مرحله دوم: سفارشی سازی چیدمان صفحه
اولین کاری که هر توسعهدهندهای میکند، سفارشیسازی چیدمان عناصر صفحه با سلیقه خودش است. برای جابهجایی صفحات به سادگی میتوان بر روی آنها کلیک کرد و به جای مورد نظر انتقال داد. البته میتوانیم از چیدمان پیشفرض خود یونیتی هم استفاده کنیم. برای انجام این کار بر روی منو آبشاری «Layout» در سمت چپ بالای صفحه کلیک میکنیم.

در یونیتی، ۵ پنجره اصلی وجود دارد. بیشتر وقتها، توسعهدهندگان با آنها کار میکنند. این پنجرهها را در فهرست زیر نام بردهایم.
- Scene: این پنجره، جایی است که عملیات ساخت بازی را در آن انجام میدهیم. در این پنجره تمام عناصر موجود در بازی و مکان قرارگیری آنها مشخص است. جعبه کوچکی در گوشه بالا سمت راست صفحه وجود دارد که جهتهای مختلف را نشان میدهد.
- Game: با کمک این پنجره نمای دوربین اصلی بازی در زمان اجرای بازی را مشاهده میکنیم. با کلیک کردن بر روی دکمه «Play» میتوانیم بازی که ساختهایم را در این بخش تست کنیم. این دکمه در بخش وسط بالای صفحه قرار دارد.
- Hierarchy: در این پنجره تمام چیزهای اضافه شده به صحنه بازی به شکل فهرستوار نمایش داده میشوند. در ابتدای کار این پنجره فقط دوربین اصلی را نشان میدهد. با کلیک بر روی «Create» یا استفاده از منوی «GameObject» در بالای صفحه میتوانیم عناصر جدید را به صحنه بازی اضافه کنیم.
- Project: در این پنجره تمام فایلهای بازی نمایش داده میشوند. به عنوان توسعه دهنده میتوانیم پوشهها، اسکریپتها و چیزهای دیگر را با کلیک کردن بر روی دکمه Create در بخش پایین پنجره «Project» ایجاد کنیم.
- Inspector: این پنجره به توسعهدهندگان برای تغییر دادن تمام چیزهای درون صحنه بازی کمک میکند. در پنجره «Hierarchy» بر روی یک شیء کلیک کنید یا اینکه بر روی یکی از اشیا موجود در صحنه دابل کلیک کنید. در این حالت میتوانید تنظیمات شیء مورد نظر را در پنجره «Inspector» مشاهده کنید.

مرحله سوم: ذخیره سازی صحنه و راهاندازی ساختمان بازی
ابتدا بر روی منوی «File» کلیک کرده و سپس گزینه «Save Scene» را انتخاب کنید. صحنه بازی را در پوشهای با نام «نام پروژه-Assets» ذخیره کنید. فولدر «Assets» از قبل برای ذخیرهسازی صحنهها و اسکریپتها آماده شده است. برای سازماندهی بیشتر میتوانید فولدری به نام «Scenes» در آن ایجاد کرده و سپس صحنههای مختلف بازی را در این فولدر ذخیره کنید. اسم صحنه اصلی بازی - تنها صحنه بازی در این مثال - را «Scene» یا «Main» میگذاریم.
- بر روی منوی «File» کلیک کرده و سپس گزینه «Build Settings» را انتخاب کنید.
- برای اضافه کردن صحنه به بازی بر روی گزینه «Add Open Scenes» کلیک کنید.
- در این قسمت باید پلتفرمی را انتخاب کنید. از بین گزینههای «Computers» یا «Game Systems» یا «Phones» یکی را انتخاب کنید. به عنوان اولین پروژه میتوانید گزینههای «Web Player» یا «PC/Mac/Linux Standalone» را هم انتخاب کنید.
- در بخش پایین بر روی گزینه «Player Settings» کلیک کنید. پنجرهای مربوط به تنظیمات بازیکن در سمت راست پنجره Inspector باز میشود. در این بخش میتوانید نام شرکت، محصول - بازی - آیکون پیشفرض و دیگر مشخصات بازی را تغییر دهید.

پنجره «Build Settings» را بسته و خارج شوید. بعد از اینکه ساخت بازی به پایان رسید، یکبار دیگر با این بخش کار میکنیم.
مرحله چهارم: ساخت زمین بازی
سادهترین روش برای ساخت زمین بازی در یونیتی این است که از مکعبها استفاده کنیم. برای انجام این کار به منوی «GameObject» رفته و سپس از بخش «Create Other» بر روی گزینه «Cube» کلیک کنید. هرچند میتوانید از دکمه Create در پنجره Hierarchy هم استفاده کنید. با این کار مکعبی به صحنه بازی افزوده میشود.

در ادامه، مراحل ساخت کف زمین بازی را به صورت گامبهگام در فهرست زیر نوشتهایم.
- مکعب را انتخاب کنید. در پنجره Inspector بر روی گزینه Transformراست کلیک کرده و سپس بر روی «Reset» کلیک کنید. هر وقتی که شیء جدیدی ایجاد کردید، بهتر است این کار را انجام دهید.
- اکنون نام مکعب را به «Wall» تغییر دهید. برای انجام این کار، هم میتوانید در بخش Hierarchy بر روی نام دابلکلیک کنید و هم از بخش Inspector اقدام کنید. مکعب را در جهت X بکشید تا جایی که به شبیه به دیوار بزرگی شود.
- بر روی Wall در Hierarchy راست کلیک کنید. سپس سه بار بر روی «Duplicate» کلیک کنید. اکنون چهار دیوار مجزا تشکیل دادهایم. اما به شکل یک دیوار دیده میشوند. زیرا همه آنها در یکجا قرار دارند. با استفاده از ابزار Transform آنها را جابهجا کنید. شکل مربع یا کادر مانندی با کمک این دیوارها ایجاد کنید. این کادر، میدان بازی را تشکیل میدهد.
- اکنون از منوی «GameObject» بر روی گزینه «Create Empty» کلیک کنید. این کار باعث به وجود آمدن شیء خالی میشود. نام این شیء را Stage بگذارید. این شیء را هم در پنجره Transform ریست کنید.
- در پنجره Hierarchy، هر چهار دیوار را انتخاب کرده و آنها را به زیر شیء Stage انتقال دهید. با استفاده از دکمه Create در بخش Hierarchy یک «Plane» بسازید. این شیء نقش کف زمین را بازی میکند. نام آن را به Floor تغییر دهید. سپس به خوبی آن را به زیر Stage منتقل کنید.
نکته: بعد از تغییردادن نام حتما دکمه Enter را فشار دهید تا نام جدید ذخیره شود. مختصات Y مربوط به Floor را برابر با -0.5 قرار دهید. با این کار، کف زمین هم ردیف با دیوارها قرار میگیرد. همچنین در بخش تنظیمات کف «Floor» مقدار Scale را برای X و Y و Z برابر با یکدهم مقیاس استفاده شده برای Wall قرار دهید.
مرحله پنجم: ساخت بازیکن
میتوانیم کاراکترهای بازی را از منابع آنلاین مختلفی مانند فروشگاه یونیتی دانلود کنیم. اما در این مطلب از یکی از اشیاء درونی به عنوان بازیکن استفاده کردهایم.
- از منوی «GameObject» گزینه «Create Other» را انتخاب کرده و سپس بر روی «Sphere» کلیک کنید.
- در پنجره Hierarchy بر روی Sphere کلیک کنید.
- نام آن را به Player تغییر دهید.
- Transform شیء بازیکن را در پنجره Inspector ریست کنید.

اکنون کاری میکنیم که بازیکن از قوانین فیزیک پیروی کند.
- Player را انتخاب کنید.
- در پایین بخش Inspector بر روی «Add Component» کلیک کنید.
- گزینه Physics – Rigidbody را اضافه کنید.
- بقیه تنظیمات را همانگونه که هستند رها کنید.
هر شیء در یونیتی دارای مولفههایی است که تواناییهای خاصی به آن میدهند. به این مولفهها Component گفته میشود. بیشتر این مولفهها در بخش Inspector مربوط به هر شیء نشان داده میشوند. برای مثال، شیء «کُره» (Sphere) دارای «Collider» است. Collider به ناحیهای گفته میشود که شیء میتواند اشیاء دیگر را لمس کرده یا با آنها برخورد کند.
- اگر Collider را خاموش کنیم، شیء رفتار شبحوار خواهد داشت. یعنی از درون دیوارها و اشیا دیگر رد میشود.
- هر Component را میتوان خاموش و روشن کرد. برای این کار فقط کافیست که تیک کنار نام آن را برداشته یا بگذاریم.
مرحله ششم: دادن امکان حرکت به بازیکن
در این مرحله اول باید اسکریپتی را برای بازیکن مشخص کنیم.
- در بخش Hierarchy بر روی Player کلیک کنید.
- در بخش Inspector، مولفههای زیادی نمایش داده میشوند. برای تمیزتر شدن فضای کار، مولفههایی که لازم نداریم را مخفی میکنیم. برای این کار فقط کافی است که بر روی علامت فلش کوچک در کنار نام مولفه کلیک کنید.
- در بخش پایین Inspector بر روی گزینه Add Component کلیک کنید.
- گزینه «New Script» را انتخاب کنید.
- نام اسکریپت خود را PlayerController قرار دهید.
- زبان سی شارپ را انتخاب کرده و سپس بر روی «Create and Add» کلیک کنید.

وقتی که اسکریپت مینویسیم، مخصوصا در پروژههای بزرگ، ممکن است که فایلهای زیادی تولید شوند. لازم است حتما فایلهای خود را به صورت سازماندهی شده ذخیره کنیم.
- در پنجره Project بر روی پوشه Assets کلیک کنید.
- در فضای خالی راستکلیک کرده و از بخش Create گزینه Folder را انتخاب کنید. نام این فولدر را Scripts بگذارید.
- اسکرپیتهای نوشته شده و جدید خود را به پوشه Scripts انتقال دهید.
برای باز کردن اسکریپت، کافی است که بر روی نام آن در بخش Inspector یا Project دابلکلیک کنید. این کار باعث باز شدن ویرایشگرهایی به نام «MonoDevelop» یا «Visual Studio» میشود. این مسئله بستگی به تنظیمات مربوط به راهاندازی یونیتی دارد.
- برای کدنویسی باید بسیار دقیق عمل کنیم. هر اسکریپتی باید دو تابع Start() و Update() را داشته باشد.
- تابع Start() یکبار در زمان شروع بازی اجرا میشود. اما تابع Update() به شکل مداوم و تا وقتی که شیء مورد نظر در بازی است - با اجرای هر فریم یکبار - اجرا میشود. به اسکریپتهای خود تابع سومی به نام FixedUpdate اضافه میکنیم. این تابع وظیفه اجرای قوانین فیزیک را برعهده دارد.
- قبل از وارد کردن دستورات، باید متغیرهای مورد نیاز خود را تعریف کنیم. تعریف متغیر در بخشهای بالایی و ابتدایی صفحه کدنویسی انجام میشود. متغیرها درون آکولادهای باز و بسته {}، قبل از تابع void Start() و بعد از خط زیر، تعریف میشوند.
- متغری به نام speed را برای حرکت بازیکن ایجاد میکنیم. این متغیر سرعت حرکت بازیکن را بر روی زمین بازی مشخص میکند. نوع متغیر را float میگذاریم.
- کاراکتر سمیکالن «;» انتهای خط را مشخص میکند. فراموشی این کاراکترها باعث اعلام خطای سینتکس میشود.
- در داخل تابع FixedUpdate دو متغیر float دیگر هم ایجاد میکنیم. نام این متغیرها را به ترتیب moveHorizontal و moveVertical میگذاریم. این متغیرها مقدار خود را از صفحه کلید بدست میآورند. تابع FixedUpdate آنها را یکبار در هر فریم، بررسی میکند.
- باید متغیر دیگری از نوع Vector3 در FixedUpdate تعریف کنیم. متغیرهای Vector3 سه مقدار مختلف دریافت میکنند. از این متغیرها برای حرکت دادن اشیا در فضای سهبعدی استفاده میشود. این متغیر ورودیهای کاربر را برای انجام حرکت به سمت چپ، راست، جلو، عقب، بالا و پایین ذخیره میکند. در این پروژه، مقدار حرکات بالا و پایین را برابر با 0 قرار میدهیم. زیرا در این بازی، بازیکن فقط بر روی صفحه و به صورت دوبعدی حرکت میکند.
- در مرحله بعد هم برای حرکت دادن بازیکن، باید نیرویی را به بازی اضافه کنیم. برای انجام این کار از کد rigidbody.AddForce استفاده میکنیم. این تنظیم در بخش Rigidbody بازیکن قرار دارد.
کد Time.deltaTime به روانتر شدن حرکت کمک میکند. بعدا در یونیتی سرعت مربوط به این کد را تغییر میدهیم.
بعد از نوشتن کدهای بالا در اسکریپت، فایل سی شارپ را ذخیره کنید. سپس به محیط کار یونیتی برگردید. ابتدا player را انتخاب کنید. اکنون میتوانید در بخش Inspector اسکریپت مربوط به حرکت را مشاهده کنید. در اینجا کادری برای متغیر speed وجود دارد. در Inspector میتوانید مقدار متغیرهای public را تغییر دهید.
فعلا برای متغیر سرعت، مقداری از بین 100 تا 1000 انتخاب کنید. سپس بر روی دکمه «Play» در بخش وسط بالای صفحه نمایش، کلیک کنید. اکنون باید بتوانید که با استفاده از دکمههای A و S و W و D یا دکمههای جهت بر روی صفحه کلید این کُره را حرکت دهید. برای متوقف کردن بخش آزمایشی دوباره بر روی دکمه Play کلیک کنید.
مرحله هفتم: نورپردازی
در این مرحله ابتدا شیء خالی از نوع Game Object ایجاد کرده و نام آن را Lights میگذاریم.
- در نوار ابزار بر روی Game Object کلیک کرده و سپس گزینه Create Empty را انتخاب کنید.
- اکنون باید نور جهتدار ایجاد کنیم. پس در بخش Hierarchy بر روی Create کلیک کرده و سپس گزینه «Directional Light» را انتخاب کنید.
- نام این شیء را Main Light بگذارید.
- آن را به فرزند شیء Lights تبدیل کنید. برای انجام این کار فقط باید Main Light را با ماوس انتخاب کرده و به زیر گزینه Lights منتقل کنید.
- دوباره Main Light را انتخاب کنید.
- سپس در بخش Inspector، مقدار «Shadow Type» را بر روی Soft Shadows تنظیم کنید.
- مقدار «Resolution» را هم برابر با Very High Resolution قرار دهید.
- در بخش Inspector باید چرخش نور را هم تغییر دهیم. این کار باعث میشود که نور مستقیم از بالا به پایین بر روی صفحه بازی بتابد. به این منظور از مقادیر X = 30 و Y = 60 و Z = 0 استفاده کنید.

برای بهتر و طبیعیتر شدن نور فضای بازی، یک منبع نور دومی به محیط اضافه میکنیم. مراحل انجام این کار را در فهرست زیر یک به یک نوشتهایم.
- در بخش Hierarchy بر روی Main Light راست کلیک کنید.
- گزینه Duplicate را انتخاب کرده و از روی این منبع نوری یکی دیگر ایجاد کنید.
- نسخه جدید Main Light را Fill Light بنامید.
- Fill Light را هم مانند روش قبل به فرزندی از کلاس Lights تبدیل کنید.
- رنگ Fill Light را به آبی کم رنگ تغییر دهید.
- مقدار «Intensity» یا شدت نور را بر روی 0.1 تنظیم کنید. این کار را باید در بخش Inspector انجام دهید.
- در شیء Fill Light مقدار «Shadows» را برابر با No Shadows قرار دهید.
- جهت Fill Light را با تنظیمات X = 330 و Y = 300 و Z = 0 تغییر دهید.
مرحله هشتم: تنظیم زاویه دوربین
میخواهیم دوربین از بالا به پایین به صفحه بازی نگاه کند. برای انجام این کار در بخش Hierarchy گزینه Main Camera را انتخاب کنید. باید تنظیمات Transform این شیء را تغییر دهیم.

در بخش سمت راست و پایین پنجره Scene به پیشنمایش دوربین توجه کنید. موقعیت دوربین را تا جایی تغییر دهید که به نمای خوبی از صفحه بازی برسید. میتوانید از مقدار (0, 10.5, -10) برای «Position» و از مقدار (45, 0, 0) برای «Rotation» استفاده کنید. با توجه به نمای صحنه هم میتوان دوربین را جابهجا کرد.
مرحله نهم: دنبال کردن بازیکن توسط دوربین
در این بخش از مطلب آموزش سی شارپ در یونیتی روش تعقیب بازیکن توسط دوربین را یاد دادهایم. یعنی کار میکنیم که دوربین، همزمان با حرکت بازیکن، آن را دنبال کند. به این منظور، اسکریپت جدیدی به نام cameraMovement ایجاد میکنیم. در بخش Inspector این اسکریپت را به Main Camera اضافه میکنیم. سپس بر روی اسکریپت دابلکلیک میکنیم تا توسط کد ادیتور باز شود.
جزئیات مربوط به نوشتن این اسکریپت را در فهرست زیر بیان کردهایم.
- این اسکریپت باید از شیء دیگری در بازی به نام player هم استفاده کند. این مسئله را باید قبل از نوشتن تابع Start() مشخص کنیم. به همین دلیل از کد public GameObject player; -بالاتر از تابع Start() - استفاده میکنیم.
- سپس متغیری از نوع Vector3 و با نام offset ایجاد میکنیم. این کار را با کمک کد private Vector3 offset; انجام دادهایم.
- با استفاده از کد offset = transform.position; در تابع Start() به متغیر offset مقداری را اختصاص میدهیم. این کد به معنای آن است که در موقعیت دوربین، مقدارهای (x, y, z) با کمک offset مشخص میشوند.
- در خط آخر، تابعی به نام LateUpdate() تعریف کردهایم. داخل این تابع هم موقعیت قرارگیری دوربین را تنظیم کردیم.
در نهایت اسکریپت را ذخیره کرده و به یونیتی برمیگردیم.

اکنون بر روی Main Camera کلیک کنید. در بخش Inspector و زیر اسکریپت «CameraMovement» میتوانید جعبهای به نام Player را مشاهده کنید. در حال حاضر، مقدار این گزینه برابر با None (GameObject) است. شیء Player را از Hierarchy کشیده و در این کادر رها کنید. اسکریپت جدید را هم به فولدر Scripts انتقال دهید. فولدر Scripts در داخل فولدر Assets در پروژه قرار دارد.
بر روی دکمه Play در بالای صفحه نمایش کلیک کنید. اکنون باید بتوانید بازیکن را با کمک دکمههای جهت در صفحه کلید جابهجا کنید. دوربین بازیکن را دنبال میکند. الان باید تمام کارهایی که تا به اینجا انجام دادهایم را یکبار ذخیره کنید.
مرحله دهم: ساخت عناصر بازی
برای ساخت بقیه عناصر بازی، ابتدا Game Object جدیدی ایجاد میکنیم. این شیء میتواند کره، مکعب، کپسول، یا استوانه باشد. در این مطلب از مکعب استفاده کردهایم.
- نام این شیء مکعب شکل را Item بگذارید.
- گزینه Tags را انتخاب کرده و تگ جدیدی به نام Item ایجاد کنید.
- سپس برچسب Item را به شیء مکعب ساخته شده اختصاص بدهید.
به تمام عناصر موجود در بازی با این روش تگ بزنید. به املای کلمات و بزرگی و کوچکی حروف دقت کنید.

Game Object خالی و جدیدی درست کنید و نام آن را Items بگذارید. سپس عنصر ساخته شده را به Items منتقل کنید. تمام Transform-های مرتبط را ریست کنید. به Item ساخته شده Rigidbody اضافه کنید. سپس با کمک Duplicate چندین نمونه دیگر از روی این عنصر ایجاد کرده و در اطراف زمین بازی قرار بدهید.
مرحله یازدهم: جمع کردن عناصر توسط بازیکن و نمایش امتیاز
از بخش Inspector، اسکریپت مربوط به حرکت بازیکن را باز کنید. در این بخش، اسکرپیت را طوری تغییر میدهیم که بازیکن بتواند عناصر موجود در زمین بازی را جمع کند. سپس از روی عناصر جمع شده امتیازات او را محاسبه میکنیم.

دو متغیر جدید تعریف میکنیم. یکی برای نمایش دادن امتیاز بازیکن و دیگری از نوع GUIText برای نمایش امتیاز بر روی صفحه.
زیر تابع void Start() مقدار متغیرهای امتیاز count و متن گرافیکی CountText را مقداردهی میکنیم.
در این بازی گاهی از اوقات، بازیکن با سایر عناصر بازی برخورد میکند. برای مدیریت این موقعیتها باید تابع جدیدی بنویسیم. این تابع هم - مانند توابع void Start() و void Update() - بخش مخصوص به خود را دارد.
تابع CountText را برای بروزرسانی نمایش امتیازات بازیکن مینویسیم.
کدها را ذخیره کرده و به یونیتی برمیگردیم. برای استفاده هرچه بهتر از اسکریپت طراحی شده باید تنظیمات خاصی را انجام بدهیم. این تنظیمات را در فهرست زیر بیان کردیم.
- تمام عناصر را انتخاب کرده و تگ item را به آنها اختصاص دهید.
- در بخش «Box Collider» از پنجره Inspector گزینه «Is Trigger» را تیک بزنید.
- در بخش Rigidbody گزینه «Is Kinematic» را تیک بزنید. این گزینه جاذبه را خاموش کرده و از سقوط اجزای بازی از روی زمین جلوگیری میکند.
- برای نمایش امتیازات، در پایین پنجره Hierarchy، با کمک گزینه Create شیء «GUI Text» جدیدی ایجاد کنید.
- مقدار Transform شیء GUI Text را برابر با (0,1,0) قرار دهید.
- در بخش GUIText از پنجره Inspector مقدار Pixel Offset را برابر با (10, -10) قراردهید.

در نهایت هم GUIText را به کادر CountText منتقل کنید. این کادر در بخش Player از پنجره Inspector قرار دارد.
مرحله دوازدهم: ساخت موانع در بازی
این پنلهایی که به سختی دیده میشوند، بازیکن را به هوا پرتاب میکنند. حتی احتمال دارد که بازیکن از لبه میدان بازی به بیرون پرتاب شود. در نتیجه بازی به پایان میرسد و بازیکن شکست میخورد. ساختن موانع و خطرات مختلف در مقابل بازیکن فرایندی شبیه به ساختن عناصر عادی بازی دارد.
- Game Object جدیدی بسازید و نام آن را Hazard بگذارید.
- شیء چهارگوش جدیدی بسازید و نام آن را هم Hazard بگذارید.
- تگی به نام Hazard ایجاد کنید.
- تگ Hazard را به شیء Hazard اختصاص دهید.
- سپس گزینه «Is Trigger» را تیک بزنید.

برای اینکه بتوانیم شیء Hazard را ببینیم، باید رنگ آن را تغییر دهیم. برای تغییر دادن رنگ این شیء مراحل زیر را یک به یک دنبال کنید.
- Hazard را انتخاب کنید.
- در بخش Inspector، گزینه «Mesh Renderer» را تیک بزنید.
- سپس بر روی آیتم آبشاری کنار «Materials» کلیک کرده و رنگ دیگری به غیر از خاکستری پیشفرض را انتخاب کنید. برای انجام این کار باید بر روی دایره خاکستری کوچک موجود در کادر پایینی - مطابق تصویر بالا - کلیک کنید.
در این مطلب از رنگ سفید از پیش نصب شده در سیستم استفاده کردهایم.
مانع ساخته شده را ۹۰ درجه در محور X چرخانده و مقدار ارتفاع آن را در محور Y تا -0.4 کم کنید. در نتیجه مربع سفید کوچکی دقیقا بر روی کف زمین ایجاد میشود.

الان باید اسکریپت بازیکن - با نام Player - را ویرایش کنیم. تابع OnTriggerEnter() را به آن اضافه میکنیم تا رویداد برخورد بازیکن با مانع را مدیریت کند. در این تابع باید حتما وقوع برخورد بین بازیکن و مانع Hazard را بررسی کنیم. اگر بازیکن با این مانع برخورد کرد باید به هوا پرتاب شود.
در کدهای پایین کاری کردهایم که بازیکن در زمان برخورد به مانع به هوا بپرد.
کد را ذخیره کرده و به یونیتی برمیگردیم. از این مانع ساخته شده چندین مورد دیگر ایجاد میکنیم. موانع ساخته شده را بر روی مکانهای مختلف در زمین بازی پخش کرده و بازی خود را شروع میکنیم.
جمعبندی
یونیتی یکی از بهترین موتورهای بازیسازی در دنیاست. با کمک این موتور میتوان بازیهای دوبعدی و سهبعدی متنوعی ساخت. یکی از مهمترین نقاط قوط یونیتی استفاده از سی شارپ برای نوشتن کدها و اسکریپهای مربوط به بازی است. سی شارپ زبان قدرتمند و انعطافپذیری است. اما سینتکس ساده، یادگیری سی شارپ را راحت کرده است. به همین دلیل گزینه بسیار مناسبی برای کار با یونیتی است.
در این مطلب از مجله فرادرس، اصول کلی مربوط به آموزش سی شارپ در یونیتی را مطرح کردهایم. از آنجا که بازار کار فعالان حوزه بازیسازی به شکل مداوم در حال گسترش است، افراد زیادی هم علاقهمند به ورود به این حوزه شدهاند. تقریبا یکی از روشهای خوب برای شاغل شدن در صنعت بازیسازی گذراندن دورههای مربوط به آموزش سی شارپ در یونیتی است.












