ساختار و طرز کار اسکریپت‌ها

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

هر اسکریپت یونیتی، فایلی متنی با فرمت cs (مخفف CSharp) است که اگر توسط فرمانCreate C# Script ادیتور یونیتی ایجاد شده باشد (با مراجعه به پنجره‌ی Project و انتخاب C# Script از منوی Create) محتوی کدهای از پیش نوشته شده‌ای خواهد بود.

این کد از پیش نوشته شده شامل کلاسی همنام فایل است که از کلاسی به نام MonoBehaviour ارث‌بری کرده و دارای دو متد Start و Update می‌باشد.

نکته

این عمل با قواعد دات نت فریمورک برای فایل‌های سی شارپ کاملاً مطابق است. چرا که در سی شارپ استاندارد نیز هر کلاس در فایلی همنام خودش قرار دارد.

نکته

به دلیل همنام بودن نام کلاسی که برای اسکریپت ایجاد می‌گردد با نام فایل توصیه می‌شود که نام اسکریپت مطابق با قواعد نامگذاری کلاس و به صورت PascalCase نوشته شود.

به عنوان مثال اگر اسکریپتی به نام TestScript در ادیتور یونیتی ایجاد کنیم محتوایی که پس از ایجاد شدن فایل به صورت اتوماتیک در آن قرار می‌گیرد به صورت زیر خواهد بود:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestScript : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
}

اسکریپت MonoBehaviour

کلاس اسکریپت‌هایی که فایل آن‌ها توسط یونیتی ایجاد می‌شود به طور خودکار از کلاسی به نام MonoBahaviour ارث‌بری می‌کنند. کلاس MonoBahaviour یکی از کلاس‌های مختص به یونیتی بوده که در فضای نام UnityEngine قرار دارد (در مثال بالا این فضای نام در سطر 3 به اسکریپت شناسانده شده است). به اسکریپتی که از کلاس MonoBahaviour ارث‌بری کرده باشد اسکریپت MonoBahaviour گفته می‌شود.

برای این که یک اسکریپت بتواند به صورت کامپوننت به گیم‌آبجکت‌ها اضافه شود لازم است که از این کلاس ارث‌بری کرده باشد؛ در غیر این صورت هنگام drag کردن آن بر روی Inspector گیم‌آبجکت با خطا مواجه می‌شویم. از آن‌جایی که در اکثر موارد هدف از اسکریپت‌نویسی ایجاد کامپوننت اختصاصی است بنابراین کلاس‌های ایجاد شده به طور پیش‌فرض از کلاس MonoBahaviour ارث‌بری می‌کنند. در مواردی به جز استفاده از اسکریپت به عنوان کامپوننت، می‌توان به سادگی عبارت MonoBahaviour را به طور دستی حذف کرد. اما تقریباً تمام اسکریپت‌هایی که ما در یونیتی می‌نویسیم به منظور ایجاد کامپوننت و در نتیجه اسکریپت MonoBehaviour هستند.

از آن‌جایی که هر کامپوننت یونیتی در واقع یک شی محسوب می‌شود بنابراین کامپوننتی که از روی اسکریپت MonoBahaviour ساخته می‌شود نیز یک شی به شمار می‌رود. در این حالت شی از روی کلاس اسکریپت MonoBehaviour که اسکریپت‌نویس بازی نوشته است نمونه‌سازی می‌شود.

image

مثل هر کلاس دیگری در سی شارپ، کلاس‌های اسکریپت‌های یونیتی نیز از فیلدها و متدها تشکیل شده‌اند. در اسکریپت‌های MonoBehaviour فیلدها و متدها هر کدام نقش مشخصی را در کامپوننت ساخته شده ایفا می‌کنند که در مطالب بعدی به آن‌ها خواهیم پرداخت.