
چند وقت پیش، بعد از مدت ها دوباره به سرم زد که به دنیای بازی سازی سری بزنم. مدت ها پیش چند بار تلاش کرده بودم که با unity بازی بسازم اما متاسفانه هربار با شکست مواجه میشدم. تجربه شکست های متعدد در ساخت بازی با unity تبدیل به زخم کهنه ای شده بود که هر از چند گاهی اذیتم می کرد.
اولین باری که تصمیم گرفتم بازی بسازم اصلا فکر نمی کردم که ساخت یک بازی می تونه اینقدر سخت باشه. فکر می کردم بازی سازی هم مثل اسکریپت نویسی ساده هستش.
یادمه قبلا خیلی بازی های کامپیوتری رو دوست داشتم. یادمه که خیلی نسبت به گیم پلی، گرافیک و ... بازی ها گیر می دادم. اما الان به همون بازی ها به طور تحسین آمیزی نگاه می کنم و از اونها الهام میگیرم.
این نوع طرز تفکر به خاطر سختی هایی بود که در بازی سازی کشیدم.
حالا بزارید کمی براتون از سختی های این راه بگم:
این یه نوع فشار روحی - روانی بود که خیلی بهم فشار می آورد.
خوب من دو سال از عمرم رو برای یادگیری توسعه وب گذاشته بودم. می تونستم هم کار های frontend و هم کار های backend رو خودم انجام بدم اما حالا می خواستم وارد فیلدی بشم که هیچ ربطی به توسعه وب نداره. یعنی می خواستم کل دانش فعلی ام رو رها کنم و دوباره برگردم به نقطه 0
فکر کردن راجب این، اوایل ذهنم رو خیلی آزار میداد ولی بالاخره موفق شدم که باهاش کنار بیام.
اولین مشکلی که برام پیش اومد مواجه شدن با کلی اصطلاح و کلمات انگلیسی عجیب و غریبی بود که اصلا نمی تونستم بفهمم چه کوفتی هستند.
موقع ساخت بازی بعضی وقت ها یه سری مشکلات با موتور فیزیک پیش می اومد که واقعا اعصاب آدم رو خورد میکرد. مثل سُرخوردن کاراکتر بازی روی سر بالایی ها (به خاطر اعمال نیروی جاذبه و عدم وجود نیروی اصطکاک). وقتی هم که می گشتی تا راه حلی براش پیدا کنی، راه حل های موجود از خود مشکلت عجیب تر بودند.
تو یونیتی تقریبا هر اسکریپتی که می نویسید مقدار کمی ریاضیات تو خودش داره چون اکثرا یا می خواهید یه سری عدد رو تغییر بدید یا اینکه با موتور فیزیک unity یه کار باحال انجام بدید. حتی اگه نخواهید این کار ها رو هم انجام بدید کلا script نویسی تو unity کمی سخته. مخصوصا وقتی به زبان #C مسلط نباشید و از طرفی هم از ریاضیات فراری باشید.
من تقریبا توی پایتون و جاوا اسکریپت خوب هستم اما مشکل اینجاست که #C یه چیز کاملا متفاوته و بخش اعظم این تفاوت به خاطر سیستم تایپ دهی (Type System) کاملا متفاوت زبان #C هستش.
بر خلاف پایتون و جاوا اسکریپت که dynamic هستند، زبان #C یک زبان strongly typed (نمی دونم فارسیش چیه) هستش که به این معنیه که باید همه جا type ها رو مشخص کنید. از پارامتر های توابع بگیر تا متغیر ها و نوع برگشتی توابع و ...
من هم اصلا به اینطور چیز ها عادت نداشتم. به زبان #C هم هیچ تسلطی نداشتم و کلا نمی دونستم که syntax این زبان چطوریه و چه امکاناتی رو داره. از طرفی هم API های unity از تمام پتانسیل #C استفاده می کردند که به این معنیه که اگه ندونی چیز های مختلف در #C چطور عمل می کنن، نمی تونی درک خوبی از سیستم scripting یونیتی به دست بیاری.
اوایل فکر می کردم که بازی سازی کلا کد نویسیه اما متوجه شدم که کد نویسی فقط یه بخش کوچیکی از کاره و خیلی چیز های دیگه رو باید یاد بگیرم. از طراحی کاراکتر گرفته تا ساخت و کنترل انیمیشن و ...
من هم که تو عمرم با هیچ نرم افزاری در زمینه نرم افزار کار نکرده بودم. حتی به برنامه paint 3D ویندوز 10 هم تسلط نداشتم ? چه برسه به blender، فتوشاپ و ...
من کلا در زمینه هنر هیچی نیستم. در تمام طول عمرم یه نقاشی درست حسابی هم نتونسته ام بکشم. نمره نقاشی و طراحیم تو مدرسه در حدود 13، 14 هستش (با اینکه تو کارنامه 20 رد می کنن اما خودم که می دونم در چه حدی هستم، اینطور نیست!؟).
نمی تونم چیزی رو تو ذهنم تجسم کنم، اگه هم بتونم نمی تونم رسمش کنم. در وجود من چیزی به نام خلاقیت و خوش ذوق بودن وجود نداره و در کل designer افتضاحی هستم.
خوب حالا شاید بگید چرا از asset های دیگران استفاده نمی کنی؟ جوابش رو در ادامه بهتون میگم
خلاصه بهتون بگم که سیستمم 4 گیگ رم و یه cpu dual core داره و خیلی کنده.
اینکه میگن بدون یه سیستم خوب هم میشه بازی ساخت هم درسته اما به هر حال نمی تونید توی بازی هاتون از تمام پتانسیل موتور بازی سازی قدرتمند unity استفاده کنید.
حالا بزارید چند تا از محدودیت هایی که سیستم ضعیفم برام ایجاد می کرد رو لیست کنم (البته الان حضور ذهن ندارم اما تا جایی که یادم بیاد رو می نویسم):
کلا بخوام فاکتور بگیرم، هرکار خفنی که می خواستم انجام بدم سیستمم "هنگ" می کرد
البته درسته که وقتی سیستمتون ضعیفه باعث ایجاد محدودیت در گرافیک بازی میشه اما بازی های زیادی هم بوده اند که از اشکال هندسی ساده استفاده می کردند و خیلی هم موفق بودند. نمونه اش همین mine craft که عنصر اصلیش شکل مکعبه اما طرفداران خیلی زیادی داره. (البته من که از این ایده های ندارم ...)
هنوز دو هفته از تصمیمم برای بازی ساز شدن نگذشته بود که تسلیم شدم و تصمیم گرفتم به دنیای وب برگردم. از اون به بعد احساس ضعف و ناتوانی می کردم.
هی با خودم فکر می کردم که توسعه وب خیلی کار آسونیه و هر کسی می تونه اون کار رو انجام بده و به خاطر همین هم هستش که من می تونم توی وب موفق باشم اما توی بقیه زمینه ها مثل بازی سازی، هوش مصنوعی و ... با کله به زمین می خورم.
احساس می کردم که فقط به خاطر سادگی پایتونه که می تونم برنامه نویسی کنم. فکر می کردم که من فقط یه آدم بی استعدادم که چون توان یادگیری زبان های پیشرفته ای مثل ++C و #C رو نداره، به ناچار اومده سراغ پایتون.
هر وقت می اومدم سر کامپیوتر که برای تفریح هم شده یکم کد بنویسم، فکر اینکه من یه آدم به درد نخورم حوصله برنامه نویسی رو از من میگرفت و کلی انرژی منفی می داد.
البته در این بین عوامل زیادی بود که باعث شد دوباره برگردم اما من مهم ترین هاشون رو لیست می کنم:
بعد از همه اون شکست هایی که قبلا خوردم، وجدانم رو با این آروم می کردم که "من آدم این کار نیستم"، "من نمی تونم"، "بیخیال، اشکان تو رو چه به بازی سازی آخه" و ...
اما بالاخره یک روز تصمیم گرفتم که تکلیفم رو با خودم مشخص کنم. می دونستم که نمی تونم تا ابد با این طرز فکر زندگی کنم و به خاطر شکست های گذشته زانوی غم بغل بگیرم.
با خودم گفتم درسته که من توان ساخت یه بازی سه بعدی با گرافیک عالی رو ندارم اما حداقل می تونم یه بازی کوچیک تو یونیتی بسازم. بالاخره تصمیم گرفتم که دوباره برگردم سراغ بازی سازی و دوباره شانسم رو امتحان کنم.
الان هم دارم روی یه بازی خیلی کوچیک 2 بعدی که فقط یه مرحله داره کار می کنم. اسم بازی هنوز معلوم نیست و حتی مطمئن نیستم که به اتمام میرسه یا نه. اما اگه به اتمام برسه حتما یه پست دیگه راجبش خواهم نوشت.