ساخت بازی های سه بعدی و دو بعدی با انجین گودوت 4 و مقایسه با یونیتی :
گودوت ۴ پایدار بالاخره منتشر شد!
من سالهاست که از طرفداران پروژه گودوت هستم و در حالی که همیشه فکر میکردم گودوت ۳ یک جایگزین خوب برای یونیتی است، گودوت ۴ یک رقیب واقعی به شمار میآید.
اگر شما – مانند من – از پیشینه یونیتی میآیید، گودوت ممکن است هم آشنا و هم به نوعی ناآشنا به نظر برسد. تفاوتهای ظریف کافی بین این دو موتور وجود دارد که میتواند شما را در هنگام ایجاد اولین پروژه خود در گودوت دچار مشکل کند. در این مقاله، میخواهم به مهمترین تفاوتها بپردازم تا بتوانید سفر خود را با گودوت ۴.۰ با موفقیت آغاز کنید. بیایید شروع کنیم:
صحنهها
در حالی که ممکن است به نظر برسد که صحنهها در گودوت و یونیتی عملکرد مشابهی دارند، واقعاً اینطور نیست. صحنههای گودوت بیشتر شبیه Prefabهای تقویتشده هستند تا سطوح مستقل کامل. شما باید صحنهها را نسبتاً کوچک نگه دارید و صحنهها را به صورت پویا در زمان اجرا اضافه/حذف کنید.
صحنهها میتوانند صحنههای تو در تو داشته باشند، بنابراین یک صحنه باید معمولاً شامل یک واحد منطقی از بازی شما مانند دشمن، HUD، آیتمهای قابل جمعآوری و غیره باشد. مدیریت درخت صحنه در زمان اجرا یکی از چالشهای اصلی در ساخت بازی در گودوت است و این چیزی است که موتور انتظار دارد شما همیشه در طول توسعه در نظر داشته باشید، برخلاف سیستم صحنه یونیتی که بیشتر حالت “یکبار تنظیم و فراموش کردن” دارد.
نودها
نودها در گودوت هدف واحدی دارند. شما نمیتوانید بیش از یک اسکریپت به هر نود اضافه کنید که رفتار آن نود را گسترش دهد. به طور کلی، رفتار بیشتر به نودها نسبت داده میشود تا به اجزای بازی مانند در یونیتی که در آن اجزا عملکرد را مدیریت میکنند و شما میتوانید تعداد دلخواهی از آنها را به اشیای بازی خود اضافه کنید. مثلاً میخواهید درخواستهای وب را مدیریت کنید؟ یک نود HTTPRequest برای این کار وجود دارد. میخواهید یک برخورد به یک مش اضافه کنید؟ یک نود CollisionShape به عنوان فرزند نود Collider خود اضافه کنید و آن را زیر نود MeshInstance قرار دهید.
این رویکرد تکمنظوره ممکن است در ابتدا به نظر تقسیمبندیشده بیش از حد باشد و این یکی از دلایلی است که صحنهها در گودوت معمولاً کوچکتر از یونیتی هستند. گودوت شما را مجبور میکند تا آگاهانه صحنهها را بسازید و از نودهایی که هر صحنه شامل میشود آگاه باشید. فایدهای که از این رویکرد میبرید این است که دیگر نیازی به فراخوانی مکرر GetComponent در یونیتی ندارید، به ویژه هنگامی که با GDScript کار میکنید که از نوع تایپ داک پشتیبانی میکند.
اسکریپتنویسی
صحبت از این شد، در حالی که ممکن است وسوسه شوید برنامهنویسی در گودوت را به طور کامل با C# شروع کنید (به ویژه اکنون که پشتیبانی کامل از .NET 6 وجود دارد)، زبان اسکریپتنویسی بومی گودوت یعنی GDScript از نسخه ۳ به ۴ بهروزرسانی بزرگی دریافت کرده و کار با آن بسیار راحتتر شده است. مجموعه ویژگیهای مدرن آن، نحوی شبیه به پایتون و سیستم تایپ دینامیک میتواند به شما کمک کند سریعتر به نتایج برسید.
چون گودوت در مورد ساختار صحنههای شما نسبت به یونیتی سختگیرتر است، میتوانیم از این سختگیری در هنگام برنامهنویسی بهرهبرداری کنیم. برای مثال، در اسکریپتهای گودوت معمول است که فرزندان را مستقیماً از طریق NodePath صدا بزنیم، به جای جستجوی اجزا یا تنظیم دستی ارجاعات از طریق متغیرهای سریالی شده ویرایشگر (معروف به متغیرهای export). هر دو گزینه در گودوت کار میکنند، شما فقط به آنها نیاز کمتری نسبت به یونیتی دارید.
رویدادها
طرفداران توسعه نرمافزار مبتنی بر رویداد خوشحال خواهند شد که بدانند رویدادها (در گودوت به عنوان سیگنالها شناخته میشوند) نه تنها به صورت پیشفرض در هر نود قرار دارند، بلکه بخشی کلیدی از کار با موتور هستند.
سیگنالها فوقالعاده قدرتمند هستند. شما میتوانید توابع را از طریق کد یا ویرایشگر گرافیکی متصل یا جدا کنید، به صورت دائم یا به عنوان یک فراخوانی تکبار، آرگومانها را به دلخواه پیوند دهید، حتی میتوانید آنها را منتظر بمانید. شما البته میتوانید سیگنالهای خود را نیز ایجاد کنید.
به طور کلی، شما میخواهید در گودوت رو به پایین صدا بزنید و رو به بالا سیگنال بفرستید، به این معنی که فرزندان نود خود را مستقیماً از طریق NodePath صدا بزنید و والدین نود شما منتظر سیگنالهایی باشند که ارسال میکنید. به این ترتیب، کد شما تمیز و نسبتاً آسان برای پیگیری باقی میماند، حتی با وجود چندین صحنه تو در تو که با یکدیگر ارتباط برقرار میکنند.
منابع
در گودوت واقعاً فقط دو نوع ساختار وجود دارد: نودها و منابع. و اگر چیزی به دسته اول تعلق نداشته باشد، احتمالاً به دسته دوم تعلق دارد.
مشابه ScriptableObjects در یونیتی، منابع نیز میتوانند از طریق کلاسهای کد ایجاد شوند. این بدان معناست که شما میتوانید ساختارهای داده پیچیده را به سرعت و به آسانی ایجاد کنید، آنها را در صورت نیاز ذخیره کنید و آنها را در میان چندین نمونه نود به اشتراک بگذارید. حتی یک سیستم سریالسازی قدرتمند داخلی وجود دارد که میتواند هر منبعی را به عنوان ورودی بگیرد و آن را تنها با یک خط کد به متن یا بایت تبدیل کند.
نتیجهگیری
موارد بیشتری برای بررسی وجود دارد، اما این پنج مورد اصلیترین نکاتی هستند که به نظر من باید به آنها توجه کنید. شروع کار با گودوت امروز آسانتر از هر زمان دیگری است و من مشتاقم ببینم آینده چه چیزی در بر خواهد داشت. جهش از نسخه ۳.۵ به ۴.۰ بسیار بزرگ بوده و اکنون تعداد بیشتری از افراد در حال ایجاد درخواستهای ترکیب برای گودوت هستند.