یونیتی، یک ابزار نگارش بازیهای 3 بعدی برای رایانه های شخصی و مکینتاش است. موتورهای بازی، پیچ و مهره هایی هستند که در پشت صحنه هر بازی ویدئویی قرار دارند. تمام تصمیمات از نحوۀ نگارش هنری بازی گرفته تا محاسبات ریاضی مربوط به تعیین نمایش هر یک از فریم ها بر روی تصویر، به وسیلۀ موتور گرفته می شوند.
موتور کار خود را با رندرینگ (روشی برای نمایش گرافیک ها بروی تصویر و مجتمع ساختن روش کنترلی و تنظیم مجموعه ای از قوانین برای پیشبرد بازی) آغاز می کند و چیزیست که سازنده اش آنرا برای "دربرگرفتن" بازی می سازد. موتورهای بازیهای 3 بعدی پیشرفته، مجموعه کدهایی هستند که با دقت فراوان نوشته شده اند و اغلب پس از استفاده کردن از آن در هدف اصلی خود (تولید بازی رایانه ای)، فروخته و اصلاح شده و بار دیگر مورد استفاده قرار می گیرند. مثالی واضح از اینگونه موتورها، موتور مجموعه بازیهای حماسی Unreal است. این موتور در اواخر دهۀ 1990 برای یک بازی رایانه ای اول شخص به اسم Unreal ساخته شد ولی بعدها به موفقیتهای فراوانی دست پیدا کرد و توسط سازندگان دیگر در صدها بازی تجاری و شبیه سازی مورد استفاده قرار گرفت.
این نوع موتورهای تجاری، قیمت و پیچیدگی بالایی دارند و بدون داشتن مطالعات وسیع در زبانهای برنامه نویسی مختلف از جمله C++، ورورد به عرصۀ صنعت بازیسازی برای بسیاری از افراد مستعد تازه کار امری دشوار است. بیشتر بازیهای رایانه ای و بازیهای کنسولهای مختلف، با C++ ساخته می شوند زیرا در حال حاضر، C++ از نظر سرعت محاسباتی مؤثرترین زبان برنامه نویسی است و ساختار و فرامین موتورهای بازیهای تجاری برای عمل کردن، به هزاران هزار کد برنامه نیاز دارند.
در یونیتی این کد با استفاده از کتابخانۀ Mono نسخۀ منبع باز C++ و با بهره گیری از روش کامپایل همزمان (JIT) تحویل داده می شود. با استفاده از کامپایل JIT، موتورهایی نظیر یونیتی از مزیت کامپایل با سرعت بالا برخوردار می شوند و بعنوان مثال، کدی که برای یونیتی می نویسید، درست پیش از اجراء شدن، در Mono کامپایل می شود. این ویژگی برای بازیهایی که به اجرای کد در لحظات معیّنی طی مدت زمان اجرای بازی نیاز دارند، بسیار مهم است.
یونیتی همچنین از مزایای کتابخانه های نرم افزاری دیگری نظیر موتور فیزیکی PhysX شرکت Nvidia، OpenGL، DirectX برای رندرینگ 3 بعدی و OpenAL برای صداسازی استفاده می کند. تمام این کتابخانه ها درون یونیتی گنجانده شده اند بنابراین نیازی به نگران شدن دربارۀ نحوۀ استفادۀ جداگانه از آنها نخواهید داشت و کافیست تا با آسودگی به پشتی صندلی خود تکیه داده و اجازه دهید تا آنها در یونیتی، تمام کارها را برای شما انجام دهند.
سازندگان موتورها همچنین ابزارهایی برای فرمان دادن به برنامه های کاربردی خود می سازند. بعنوان مثال، خلق یک زمینه در یک فضای باز گرافیکی، بوسیلۀ مجموعه ای از دستورالعملها انجام می شود که تعریف کنندۀ شکل (توپوگرافی) و ظاهر بصری زمینه بوده و چگونگی واکنش آنرا در برابر تغییرات شکلی صورت گرفته طی بازی، تعیین می کنند. ولی این مجموعۀ دستورالعملها، در صورت متصل نبودن به ابزاری بصری برای کنترل کردن ویژگیهای اشاره شده در بالا، بعنوان بخشی از موتور، کارایی نخواهد داشت بنابراین، به وجود یک واسط کاربری گرافیکی (GUI) نیاز است. سازندگان موتور بازیها اغلب واسطی شامل چند ابزار می سازند. این واسط از یک سو به اعضای گروه سازنده اجازه می دهد تا همزمان بر روی بخشهای مختلف موتور کار کنند و زمان فرایند ساخت را کاهش دهند و از سوی دیگر در مرحلۀ پس تولید، موتور را در دسترس خریداران بالقوۀ دیگر قرار می دهد. همچنین یونیتی یک جمعیت کاربری بسیار بزرگ دارد که اعضای آن، ابزارهای خود را بشکل پلاگین های مختلفی برای یونیتی، با یکدیگر به اشتراک می گذارند. برای کسب اطلاعات بیشتر می توانید به بخش جامعۀ یونیتی در http://www.unitycommunity.com/wiki مراجعه کنید.
ورود به عرصۀ بازیسازی مستلزم آموختن زبانهای برنامه نویسی دشواری نظیر C++ یا موتورهای ساخته شده با این زبان بوده و برای بسیاری از تازه کاران دشوار است. آغاز یادگیری مفاهیم، روشها و اصول طراحی بازیسازی بدون تحصیل در سطح کارشناسی برنامه نویسی یا انیمیشن رایانه ای، برای بسیاری از مشتاقان این صنعت امکان پذیر نیست. شرکت Unity Technologies، راه حلی برای رفع این مشکل ارائه کرده است. این شرکت دانمارکی فعالیتش را در سال 2001 با ساخت موتور بازی اختصاصی خود آغاز کرده و پس از آن همواره کوشیده است تا موتور بازی خود را ساده تر کند و یک بستۀ بازیسازی ساده با کاربری آسان و فراگیر ارائه دهد. مهندسان یونیتی سعی کرده اند تا بجای ساخت یک GUI (واسط کاربری گرافیکی)، کد منبع پیشران موتور را در ورای صحنه های بازی قرار داده و نگهدارند. اینکار به کاربر اجازه می دهد تا بدون نیاز به ساخت بخشهای مجزا، کد منبع موتور قدرتمند را کنترل کند. این عامل یونیتی را در میان بازیسازان تازه کار بسیار محبوب کرده و احتمالاً یک دلیل مهم شما برای خواندن این کتاب است. یونیتی با ساخت مفاهیم منطقی و رده بندی روشهای مرسوم مورد استفاده در بازیسازی، قدرت موتور خود را در دستان کاربر قرار داده و اجازه می دهد تا با کمترین تلاش، حداکثر نتیجه حاصل شود.
یونیتی برای بازیسازان جدید جذابیت زیادی داشته و چنان شکاف بزرگی را در بازار بازیسازی پر کرده که کمتر نرم افزار یا موتور دیگری قادر به انجام آن بوده است. یونیتی دارای قابلیت تولید بازیهای استاندارد حرفه ای با محیطهای 3 بعدی برای هر دو گروه رایانه های شخصی و مکینتاش است و یک وب پلیر انحصاری دارد. این خصوصیات باعث شده اند تا کمتر نرم افزاری از جنبۀ سرعت فراگیر شدن به سطح یونیتی برسد. همچنین نسخه های مخصوص Wii شرکت Nintendo و گوشی تلفن همراه iPhone شرکت Apple و پلی استیشن و اندروید این موتور نیز در دسترسند . مفهومش آنستکه پس از کسب مهمارت در استفاده از یونیتی، می توانید علاوه بر رایانه های شخصی، برای کنسولها و گوشیهای تلفن همراه بازی بسازید.
آهنگ پرشتاب چرخ صنایع سرگرمی سازی و بازاریابی، نیازمند انجام چرخشی سریع بسوی استفاده از رسانۀ بازی رایانه ای است. همچنین، بسیاری از شرکتها اکنون در جستجوی بسته هایی مانند یونیتی هستند تا بتوانند با آنها به ساده ترین شکل ممکن، محصولات بهتری بسازند. بنظر می رسد با عرضۀ نسخۀ 2.5 یونیتی در سال 2009 که برای رایانه های شخصی طراحی شده، کاربرد این موتور- نرم افزار توسعۀ فراوانی پیدا کرده است. ولی یونیتی چیست؟ چگونه کار می کند؟ چه قابلیتهایی دارد؟ و مهمتر از همه اینکه، چگونه ظرف تنها چند هفته شما را در آغاز سفرتان برای تبدیل شدن به یک بازیساز حرفه ای همراهی می کند؟
موضوع این کتاب
این کتاب بصورتی طراحی شده است که مجموعه ای از مثالهای ساده و مرحله ای را پیش روی خواننده قرار دهد. این مثالها، خواننده را در جریان ساخت مرحله به مرحلۀ یک بازی 3 بعدی اوّل شخص با یک محیط جزیره ای اینتراکتیو قرار می دهند. در این کتاب با مفاهیم کلی تولید بازی و محیطهای مجازی 3 بعدی آشنا شده و به بررسی کاربرد یونیتی در ایجاد خاصیت فعل و انفعالی میان اشیاء، شخصیت بازی و محیط بازی پرداخته و چند معما طرح خواهیم کرد که بازیباز به منظور به پایان رساندن بازی، باید آنها را حل کند.
در اینجا فصول کتاب را بطور خلاصه معرفی می کنیم:
فصل اول: به بعد سوّم خوش آمدید
در این فصل با مفاهیم کلیدی لازم برای درک و تکمیل تمرینات ارائه شده در کتاب آشنا می شویم. نگاهی کوتاه خواهیم داشت به مفاهیم 3 بعدی و فرایندهایی که یونیتی از آنها در ساخت بازیها استفاده می کند.
فصل دوّم: محیطها
دنیای بازی چیزی بیش از یک فضای پوچ و توخالی است! در این فصل با روشهای مختلف و جالب آمیختن زمینه ها، مدلهای 3 بعدی تولید شدۀ خارجی و امکانات دیگر موتور یونیتی برای ساخت و راه اندازی محیط بازی نظیر صدا و نورپردازی آشنا می شویم.
فصل سوّم: شخصیتهای بازی
هر بازی به یک قهرمان نیاز دارد، اینگونه نیست؟ در این فصل، نگاهی داریم به تمام عناصر مرتبط با ساخت یک شخصیت بازی اول شخص از کنترلهای ورودی گرفته تا دوربینها و colliderهای او.
پس از آشنا شدن با عناصر سازندۀ شخصیت بازی خود، با او به اکتشاف جزیره رفته و در اطراف گشتی می زنیم.
فصل چهارم: فعل و انفعالات
در یک بازی رایانه ای، همه چیز به فعل و انفعال داشتن با یک دنیای مجازی مربوط است، بنابراین باید برای شخصیت بازی خود اقداماتی فعل و انفعالی تعریف کنیم. در این فصل، با دو عامل شناسایی تصادم و پرتوافکنی آشنا می شوید. سپس نگاهی خواهیم داشت به نحوۀ ترکیب این روشها با اسکریپت نویسی و انیمیشن بمنظور تبدیل ساختمان ایستای خود به ساختمانی که در مقابل حرکات بازیباز واکنشهای متفاوت نشان می دهد.
فصل پنجم: پیش ساخته ها، مجموعه و HUD
دادن نوعی حس برنده شدن و کسب موفقیت در بازی به بازیباز، امری ضروری است. برای انجام اینکار باید به نحوی شرح اقدامات و وظایف بازیباز را به او یادآوری کرده و اهدافی برای او تعیین کنید. در فصل پنجم، چیزی خواهیم ساخت که اغلب HUD (نمایشگر) نامیده می شود. اجزاء HUD، متن و تعدادی تصویر گرافیکی هستند که ضمن بازی کردن بازیباز، بصورتی پویا تغییر می کنند.
پس از ساختن یک HUD ساده، یک بازی سادۀ جمع آوری اشیاء (object collection game) خواهید ساخت که به شخصیت بازی اجازه می دهد بمنظور دسترسی یافتن به ساختمان واقع شده در جزیره، تعدادی باتری جمع آوری کند.
فصل ششم: instantiation و اجسام صلب
تقریباً هر سناریوی بازی که بتوانید تصور کنید، با خلق کردن یا اصطلاحاً بذر ریزی (spawning) اشیاء مختلف در محیط بازی سروکار دارد. در برنامه نویسی، خلق اشیاء طی زمان اجرای بازی "instantiation" نامیده شده و مفهومی بسیار مهم است که هر بازیساز تازه کار باید با آن آشنا شود.
در فصول قبل و تا اینجا، بازی جمع آوری اشیاء خود و فعل و انفعالات موجود در بازی را ساخته ایم. اکنون بر مبنای این ساختار اینتراکتیو، یک بازی هدفدار (basic target game) خواهیم ساخت که شامل پرتاب کردن اشیاء به سمت اهداف مختلف می شود. هدف از طراحی این مرحله، ایجاد روشی برای آزاد کردن (unlock) بخشی از محیط بازی است. در این فصل علاوه بر آموختن روش instantiation، با مفهوم اساسی استفاده از اشیاء دارای فیزیک اجسام صلب در بازی، آشنا خواهید شد.
فصل هفتم: سیستمهای ذره ای
امروزه ساختن یک بازی 3 بعدی که فاقد جلوه های گرافیکی خیالی برای به هیجان آوردن بازیباز باشد، چندان منطقی بنظر نمی رسد. در این فصل، برای گرم نگهداشتن شخصیت بازی خود، یک کندۀ درخت را آتش می زنید. اینکار با استفاده از دو سیستم ذره ای انجام می شود. یکی برای شعله ها و دیگری برای دود.
با استفاده از یک سیستم ذره ای، نحوۀ تقلید کردن از رفتار آتش را بررسی کرده و بمنظور افزودن بر میزان واقع گرایی بازی، در هر یک از سیستمهای ذره ای، تصاویری به کار می بریم. کار خود را با از کار انداختن آتش به پایان رسانده و برای بازیباز هدفی تعیین می کنیم که در واقع، روشن کردن آتش برای گرم ماندن است.
فصل هشتم: طراحی منو
ایجاد یک منوی حرفه ای با امکان مسیر گزینی آسان، بخش بسیار مهمی از ساخت یک بازی رایانه ای لذت بخش است. اگر کاربر نتواند دکمۀ آغاز را پیدا کند، چگونه خواهد توانست بازی شما را انجام دهد؟ در این فصل، روشهای مختلف ایجاد منوها و واسطهای کاربری دیگر برای فعل و انفعال داشتن با بازیباز بررسی می شوند.
در این فصل با الگوهای و همچنین کلاس GUI، منوهایی ایجاد می کنید که از آنها برای ساختن واسطهای با اندازه های تغییرپذیر در دو نوع مخصوص وب و desktop استفاده می شود.
فصل نهم: کارهای نهایی
در تولید بازی بخصوص هنگام کار کردن با یونیتی، به نقطه ای خواهید رسید که ساخت بعضی از قسمتهای فعل و انفعالی بازی تکمیل شده است و شما از نتیجۀ کار خود خشنود شده اید. اکنون می خواهید کارهای انجام دهید که بازیتان را پیش چشم کاربر، برجسته تر نشان دهند.
در این فصل، موضوعات دیگری نظیر صدا، جلوه های نورپردازی، رندرینگ دنباله و انواع جلوه های پویا بررسی خواهند شد. استفاده از تمام این ویژگیها آسان است و آنها، تفاوت یک بازی ساده را با یک بازی حرفه ای بی نقص و آمادۀ انتشار مشخص می کنند.
فصل دهم: ساختن و به اشتراک گذاری
در این فصل، روش صادر کردن و یا بعبارتی آماده سازی بازی برای وب و تبدیل آن به یک پروژۀ standalone بررسی می شود. هنگام آماده سازی محصول نهایی برای مخاطبین خود، به تنظیمات متفاوت و مختلفی نظیر کیفیت گرافیک، ورودی کنترل کننده و موارد دیگر نیاز دارید. در فصل دهم با این گروه از تنظیمات آشنا می شوید.
فصل یازدهم: آزمایش و مطالعۀ بیشتر
در این فصل، روشهایی که برای کمک گرفتن از کاربران آزمایشی به منظور تحلیل و اصلاح بازی خود نیاز دارید، بطور کامل بررسی می شوند. بکارگیری این روشها به شما اجازه می دهد تا پروژۀ خود را توسط تعداد بسیار بیشتری از کاربران آزمایش کرده و با استفاده ازنظرات و پیشنهادات آنها، بازی خود را اصلاح کرده و در آینده بازیهای بهتری بسازید.