بازی سازی (قسمت سوم) : تکنولوژی

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

اما سوال مهم چگونه در این بخش پیشرفت کنم؟

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

مهم ترین ابزار شما برای برنامه نویسی بازی game engine است. موتور بازی سازی در واقع ابزاری است که شما و یا عده ای دیگر فراهم می کنند تا فرایند تولید بازی ساده تر شود و به سطح محتوا نزدیک تر شود. مثلا شما خیلی راحت می گویید فلان عکس را فلان جا بگذار و … . مهم ترین قابلیت یک موتور بازی سازی یک دور اصلی (loop) درون آن ها است که در هز ثانیه چندین بار چک می کند که عملیات بعدی برای انجام چیست؟ این که آیا کلیکی انجام شده ؟ آیا تغییری نیازمند انجام است؟ و خلاصه این که می شنوید فلان بازی ۶۰ فریم بر ثانیه است یعنی loop اصلی ۶۰ بار در هر ثانیه این چک را انجام می دهد. در بررسی موتورهای جستجو عموما سه رویکرد را داریم :

 

۱- راه اول این است که موتورهای بازی سازی غول (!) مثل unity و unreal بهره بگیرید و سعی کنید بازی خود را طراحی کنید. بارها در تبلیغات یونیتی دیده ام که به drag and drop اهمیت خاصی می دهد. یعنی این راه بزرگترین منفعتش این است که بسیاری از کارها مثل animate کردن و طراحی صدا و transition بین scene های مختلف و بسیاری قابلیت های دیگر که برای بازی سازی نیازند را خودش به دست می گیرد و شما در بسیاری زمینه ها راحت ترید و کار به سرعت جلو می رود در واقع بزرگترین مزیت این موتورها این است که کارشما ساده است و فرایند develop بسیار کمتر طول خواهد کشید. اما این موتورها معایبی هم دارند. عموما این موتورها بهینگی فضا و سرعت را فدا می کنند و این می شود که عموم بازی های unity را که بازی می کنید حس می کنید گوشی به طرز محسوسی داغ شده است و باتری هم به سرعت در حال خالی شدن است. در واقع این موتورها باراضافه ای را به دوش می کشند که حاصل تلاش برای بهینه بودن در تمام زمینه ها و سادگی است. مثلا unity برای بازی سازی سه بعدی و دوبعدی قابل استفاده است. اما درعمل ما در بازی های دوبعدی شاهد این هستیم که از یک موتور سه بعدی برای محیط دو بعدی در حال استفاده هستیم و نتیجه این می شود که یک برنامه فقط با یک scene سفید ۱۲ مگ حجم دارد.

۲- راه دوم راه framework ها است. frameworkها در واقع همان عملکرد موتور را دارند یعنی شما یک بار script می زنید و در device های مختلف خروجی می گیرید اما به نسبت سطح پایین تر هستند و دیگر شاهد آن drag and drop نیستیم. به طور محسوسی زمانی که طول می کشد تا یک بازی را با این framework ها پیاده کنیم بیشتر است و البته سخت تر است اما نتیجه به نسبت از راندمان بهتری برخوردار است. در واقع این framework ها چیزی شبیه library ها هستند. که شما از قابلیت های کلیدی آن ها استفاده می کنید. این کتابخانه ها خودشان از کارت گرافیک برای render کردن استفاده می کنند و نیازی نیست که شما زحمتی برای این قسمت بکشید. هم چنین اگر open-source باشند می توانید آن ها را custom کنید یعنی قسمت هایی که به کارتان نمی آید را از آن ها حذف کرده و قسمت های مورد نیاز خودتان را به آن استفاده کنید مثلا نمونه ای که من دیدم این بود که برای الگوریتم های پیچیده مسیریابی از کاستوم کردن خود کتابخانه عده ای استفاده کرده بودند تا سرعت افزایش بیابد. چون شما با کاستوم کردن کتابخانه می توانید بعضی قسمت ها را با زبان c بنویسید که روی گوشی یا کامپیوتر سرعت به نسبت بهتری نسبت به script جاوا و یا هر چیز دیگری دارد.

۳- راه سوم هم این است که خودتان یک موتور بازی سازی دقیقا متناسب با نیاز خودتان بزنید یعنی کدهای open-gl برای استفاده از عملکرد کارت گرافیک را خودتان به دست بگیرید که البته کار سختی است و شرکت های بزرگ عموما این کار را می کنند. در ضمن ما عموما هیچ سوادی از عملکرد یک موتور بازی سازی نداریم. در برخی دانشگاه ها اصلا بازی سازی در مقطع کارشناسی جدا می شود تا بتوانند خیلی سریع تر با این جور مطالب آشنا شوند که متاسفانه ما هنوز در این زمینه کاری نکرده ایم. در واقع کسی را نداریم که بتواند مثلا درسی به نام اشنایی با موتورهای بازی سازی و گرافیک را ارائه دهد.

خب حالا که فهیدیم کلیت مسئله چیست باید ببینیم چطور باید وارد قضیه بشویم. در پست قبل سه رویکرد عمومی را گفتم. اما این که شما از کدام رویکرد استفاده می کنید به تجربه شما هم بستگی دارد. طبیعتا اگر صفر هستید رویکرد سوم حماقت است. اگر بخواهید از روش اول شروع کنید سوالی پیش می آید که unity یا unreal ؟ خودتان درمورد این دو موتور می توانید تحقیق کنید و ملت هم زیاد نوشته اند و من نمی نویسم. اما بدانید که unity عموما ساده تر است و unreal حرفه ای تر. البته این جمله به صورت کلی درست است. نظر من این است که اگر قرار است شروع کنید بازی های درون سایت خود یونیتی شروع خیلی خوبی هستند. آن ها را به صورت پروژه ای می توانید در یک هفته بزنید. هم چنین یک سری ویدیو هم برای آموزش هستند که آن ها هم در سایت یونیتی هستند که آن ها هم خیلی عالی هستند. یک درس درون coursera هم هست که محشر است و لینک های هر دوی این ها در پایین آمده است. پس از زدن پروژه اول ایده بزنید و سعی کنید پروژه خودتان را شروع کنید.

اگر هم می خواهید از راه دوم پیش بروید یه جستجوی ساده این framework های متعدد را به شما معرفی می کنند که معروف ترین آن ها در شرایط فعلی cocos2d و libgdx است. لینک هایی هم برای libgdx در پایین موجود است که ارزشمندند. تفاوت های این framework ها را می توان در یک پست دیگر گفت اما به صورت کلی اگر بخواهم بگویم cocos2d دارای documention ضعیف و عملکرد بهتر به دلیل c++ است اما در libgdx شما با java سر و کار دارید کارتان هم ساده تر است. البته عوامل بسیار فراوان دیگری هستند که موقع انتخاب game engine باید به آن ها دقت کرد ولی برای دور نشدن از موضوع فعلا این موضوع را دست نخورده باقی می گذارم.

در زمینه آموزش open-gl و همچنین آشنایی با موتورهای جستجو کتاب ها فراوان اند اما این که کدام بهتر است را هنوز خودم تجربه نکرده ام .

امیدوارم در حد توانم توانسته باشم کمک کنم که چگونه پیشرفت های ابتدایی در این زمینه بکنید. خواهشا در مرحله پیدا کردن گزینه مناسب چندان غرق نشوید خیلی سریع یکی را انتخاب کرده و شروع کنید.

لینک ها :

unity3d tutorials : unity

coursera tutorial : unity

.

flappyBirds tutorial (great for start point) : libgdx

superMario tutorial : libgdx

uducity tutorial : libgdx

multiplayer with nodejs : libgdx

good playlists : libgdx

a simple game in the main wiki of libgdx : libgdx

 

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *