مقدمه
«زمانی که امکانات معمول یونیتی برای پیادهسازی یک ساختار کافی نباشند به نوشتن اسکریپت برای آن روی میآوریم.»
اسکریپتنویسی در یونیتی با اهداف متفاوتی صورت میگیرد؛ اما اصلیترین هدف نوشتن یک اسکریپت در یونیتی ایجاد کامپوننتهای اختصاصی برای گیمآبجکتها است. اسکریپتی که امکان تبدیل به کامپوننت و اتصال به گیم آبجکت را دارد اسکریپت MonoBehaviour نامیده میشود. ما در این بخش به بررسی نسبتاً کاملی از روند اسکریپتنویسی MonoBehaviour میپردازیم.
در نسخههای پیشین یونیتی امکان استفاده از سه زبان اسکریپتنویسی در یونیتی وجود داشت که توسعهدهنده میتوانست یکی (یا بیشتر) از آنها را بسته به تواناییهای خود به دلخواه انتخاب کند. این زبانها عبارت بودند از:
- سی شارپ
- یونیتی اسکریپت (UnityScript) که شباهت نحوی زیادی با جاوا اسکریپت داشت
- بو (Boo) که از پایتون مشتق شده بود
با ارائه شدن نسخهی 5 ادیتور یونیتی پشتیبانی از زبان بو متوقف شد و سرانجام در آگوست 2017 زبان یونیتی اسکریپت نیز منسوخ گشت. دلایل این امر بیشتر به یکپارچگی و بهروز کردن فریمورکهای نرمافزاری انجین باز میگردد که به تفضیل در بلاگ یونیتی (https://blogs.unity3d.com) بررسی شده است.
در حال حاضر در نسخههای جدید یونیتی امکان اسکریپتنویسی تنها به زبان سی شارپ محدود شده است. بنابراین توسعهدهندگان جدید یونیتی نیازی به تصمیمگیری برای انتخاب زبان برنامهنویسی خود (که برای بسیاری از توسعهدهندگان قدیمیتر یونیتی چالش بزرگی بود) ندارند.
بدیهی است که بسیاری از منابع آموزشی و نمونه کدهای موجود در اینترنت از زبان یونیتی اسکریپت استفاده کردهاند. اما این موضوع کدهای فوق را غیر قابل استفاده نمیکند؛ چرا که زبان اسکریپتنویسی تنها زبان بیان عملی است که اسکریپت انجام میدهد و با تسلط نسبی به قواعد نحوی زبانها میتوان اسکریپتهای نوشته شده به زبان یونیتی اسکریپت و بو را به زبان سی شارپ بازنویسی کرد؛ ضمن آن که یونیتی در ژانویه 2019 به صورت رسمی اقدام به عرضهی ابزاری برای تبدیل کدهای یونیتی اسکریپت به سی شارپ نمود که از آدرس https://github.com/Unity-Technologies/unityscript2csharp قابل دریافت میباشد.
اسکریپتها در یونیتی فایلهایی متنی با فرمت cs (مخفف CSharp) هستند که به صورت قراردادی در فولدری به نام Scripts در فولدر ریشهی پروژه قرار میگیرند.
در بخش مقدمه به بیان مطالبی پرداخته میشود که پیشنیاز ورود به قسمت جدیتر توسعهی بازی در یونیتی یعنی کدنویسی هستند؛ ما در این بخش ابتدا به معرفی نرمافزارهای ویرایشگر کد و کاربرد آنها در کدنویسی بازی پرداخته و سپس نحوهی ایجاد یک اسکریپت، ذخیره کردن آن و در نهایت اضافه کردن اسکریپت (MonoBehaviour) به یک گیم آبجکت را بررسی میکنیم. پس از یادگیری این مطالب میتوان اسکریپتنویسی در یونیتی را آغاز کرد.
انتخاب ویرایشگر کد
ادیتور یونیتی به تنهایی دارای ابزاری برای نوشتن و ویرایش کد نیست و برای این کار از یک نرمافزار مستقل استفاده میشود. برای این منظور توسعهدهنده میتواند از ویرایشگرهایی مانند Brackets یا حتی notepad ویندوز استفاده کرده و یا برای راحتی بیشتر IDEهای زبان سی شارپ را نصب کند. IDE ویرایشگری است که علاوه بر امکانات ویرایشگرهای متن معمولی توانایی درک و اجرای کد را نیز دارا میباشد.
انتخاب یک IDE مناسب میتواند باعث افزایش چشمگیر سرعت توسعه و سهولت در نوشتن و خطایابی کد شود. پیشنهاد ما در حال حاضر استفاده از JetBrains Rider میباشد. این ادیتور که به تازگی معرفی شده توسط شرکت JetBrains (خالق IDE مشهور IntelliJ IDEA برای زبان جاوا که بعدها اندروید استودیو از روی آن توسعه داده شد) ایجاد و علاوه بر امکانات معمول یک IDE سی شارپ، برای اسکریپتنویسی در یونیتی نیز تخصصی شده است.
تغییر IDE شناختهشده برای یونیتی
در نسخههای قدیمیتر یونیتی، ویرایشگری به نام MonoDevelop به صورت توکار (bundled) در فایل نصب یونیتی وجود داشت و همراه با یونیتی نصب میشد. اما در نسخههای جدید IDE باید به صورت جداگانه دانلود و نصب شود. بعد از انجام این کار برای آن که یونیتی اسکریپتها را به واسطهی این ویرایشگر باز کند باید مسیر فایل exe ویرایشگر (که معمولاً در محل نصب آن قرار دارد) را در تنظیمات ادیتور یونیتی وارد کنیم. به این منظور پنجرهی Unity Preferences را (از منوی Edit > Preferences) باز کرده و سربرگ External Tools را انتخاب میکنیم:
در این سربرگ قسمتی به نام External Script Editor وجود دارد که ویرایشگر موردنظر خود را در آن معرفی میکنیم. در منوی آبشاری این قسمت گزینهای تحت عنوان Open by file extension وجود دارد که در صورت انتخاب آن، بعد از باز کردن یک فایل اسکریپت در یونیتی برنامهای که در explorer ویندوز اقدام به باز کردن فایلهای cs میکند اجرا میشود (در واقع عملیات باز شدن فایل به explorer ویندوز واگذار میشود). برای افزودن ویرایشگر به منو گزینهی Browse را انتخاب کرده و مسیر فایل exe ویرایشگر را به آن معرفی میکنیم. بعد از این کار نام ویرایشگر به این منوی آبشاری اضافه میشود (مانند JetBrains Rider در تصویر بالا).
ایجاد اسکریپت در ادیتور یونیتی و اجرای آن
برای ایجاد یک اسکریپت از منوی Create پنجرهی Project گزینهی C# Script را انتخاب میکنیم. سپس یک نام (با رعایت قوانین PascalCase) برای اسکریپت انتخاب کرده و کلید enter را فشرده تا اسکریپت ایجاد شود.
برای باز کردن و ویرایش یک اسکریپت بر روی asset آن دوبار کلیک میکنیم. در این مرحله نرمافزار ویرایشگر کد معرفی شده به یونیتی اجرا و اسکریپت مربوطه به طور خودکار در آن باز میشود.
ذخیره کردن اسکریپت
بعد از ویرایش اسکریپت برای اعمال تغییرات داده شده در آن به ادیتور یونیتی لازم است که آن را ذخیره کنیم. چگونگی این عمل ممکن است بسته به ویرایشگر متفاوت باشد؛ اما به احتمال قریب به یقین امکان انجام این کار با استفاده از گزینهی Save در منوی File ویرایشگر و یا استفاده از کلیدهای ترکیبی Ctrl+S وجود دارد.
بعد از ذخیره کردن اسکریپت و بازگشت به ادیتور یونیتی، زمان کوتاهی صرف کامپایل کد میشود. در هنگام کامپایل کد آیکون Loading در گوشهی پایین و سمت راست ادیتور یونیتی ملاحظه میشود.
اضافه کردن اسکریپت به گیم آبجکت
برای اضافه کردن یک اسکریپت به گیمآبجکت به عنوان یک کامپوننت، سادهترین راه drag کردن فایل اسکریپت بر روی نام گیمآبجکت در پنجرهی Hierarchy میباشد. راه دیگر انتخاب گیمآبجکت از پنجرهی Hierarchy، کلیک بر روی دکمهی Add Component موجود در Inspector، تایپ نام اسکریپت و انتخاب آن است. از این طریق میتوان به ساخت اسکریپت جدید نیز اقدام نمود.
نکته
هنگام اتصال اسکریپت به یک گیمآبجکت، کامپوننتی که ساخته میشود در واقع شیای است که از روی کلاس اسکریپت نمونهسازی شده است.