برنامه نویسی

موتور بازی رویای من – انجمن DEV

Summarize this content to 400 words in Persian Lang

ما همیشه در مورد بازی رویایی می شنویم. بازی ای که هر بازی توسعه دهنده امیدوار است بسازد. چه یک RPG جهان باز با مکانیک های Dark Souls و شخصیت های بامزه مانند Animal Crossing یا یک کلون Legend Of Zelda با عناصر ترسناک، اما ما هرگز در مورد موتورهای بازی رویایی نمی شنویم؟

یک دلیل بزرگ برای آن وجود دارد: شما از آنچه در دسترس است استفاده می کنید. اگر یک توسعه دهنده مستقل هستید، احتمالاً فقط از Unity، Godot یا Unreal استفاده می کنید. بدیهی است که اشکالی ندارد. اما، اگر مانند من هستید – از نظر ذهنی آشفته هستید، احتمالاً موتور بازی خود را می سازید یا حتی بازی های خود را از ابتدا می سازید.

بنابراین، در این پست، من در مورد آن صحبت خواهم کرد. موتور بازی رویاهای من. چیزی که می خواهم برای همیشه از آن استفاده کنم. اونی که دوست دارم باهاش ​​ازدواج کنم و بچه های بازی باهاش ​​داشته باشم. موتور بازی که آرزو دارم با آن بمیرم…

صبر کن در مورد چی صحبت می کردیم؟؟ اوه…

قبل از اینکه موتور بازی Goth کامل و مرتب و بزرگ خود را که می‌خواهم خفه‌ام کنم برای شما شرح دهم، ابتدا به ایده‌هایم برای موتور بازی “عالی” می‌پردازم. تصور هرکسی از یک موتور بازی عالی متفاوت است. بنابراین، منصفانه است که من به شما بدهم من فلسفه های خود در مورد کتابخانه ها و استفاده از آنها و به طور خاص موتورهای بازی. من همچنین می خواهم این را با بیان اینکه این است مقدمه کنم من نظر شما ممکن است نظر دیگری داشته باشید و آن هم همین است به طور کامل باشه شاید فکر کنید من اشتباه می کنم. مشکلی نیست دوست دارم بشنوم چرا اما همیشه به یاد داشته باشید، من فقط خودم را بیان می کنم نظر و نه فقط سخت حقایق. این نظرات در معرض تغییر هستند، بنابراین این را به عنوان کتاب مقدس ساخت موتورهای بازی نگیرید.

خوبه؟ باشه خوبه حالا بیایید شروع کنیم.

استفاده از رابط کاربری موتور برای ساخت بازی شما عالی است! یک دکمه برای افزودن یک موجودیت به صحنه. یک دکمه برای اضافه کردن یک گره فرزند. چند دکمه برای متحرک سازی چند دکمه دیگر برای افزودن دوربین. با این حال من یک برنامه نویس هستم. و این احساسی است که قرار است در سراسر این پست تکرار شود. من دوست دارم کارها را به روش کثیف انجام دهم. روی زانوهای من بیا و… متوجه موضوع می شوی. فشردن یک دکمه برای افزودن یک صحنه برای من شهودی نیست. ساختن یک class یا الف struct برای نگهداری اطلاعات صحنه استبا این حال، برای مغز برنامه نویس من شهودی است.

ممکن است خلاص شدن از شر رابط کاربری غیر منطقی به نظر برسد و … اینطور است. اصلاً نداشتن رابط کاربری برای موتورتان بهترین ایده نیست. به خصوص اگر بخواهید موتور شما توسط طیف گسترده ای از کارگران استفاده شود بسیار بد است. هنرمندان، نوازندگان، طراحان، و آنچه شما دارید. وادار کردن هنرمندی (که پیش از این هرگز در زندگی خود کدنویسی نکرده بود) فقط برای افزودن یک موجودیت، وارد پایگاه کدهای مزخرف شما شود، به جز اینکه بگوییم، کاملاً یک کار است. وحشتناک ایده با این حال، من نمی خواهم برنامه نویس معتبر را مجبور کنم که خیلی راحت باشد و از دکمه ها برای انجام کار نیز استفاده کند. بنابراین، راه حل در اینجا چیست؟

به نظر من، یک موتور دو بخش جداگانه دارد: – هسته: اینجاست که تمام منطق اساسی موتور وجود دارد. رندر، ایجاد پنجره، ادغام رویداد، ورودی، موجودیت و مدیریت صحنه و غیره. – ویرایشگر: این جایی است که قسمت جلوی موتور قرار دارد. این لایه توابع را از هسته به عنوان مثال، هنگامی که یک دکمه کلیک می شود، لایه موتور.

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

قبلاً نمونه هایی از این وجود دارد. Godot به شما اجازه می دهد به لایه C++ خود دسترسی داشته باشید تا بتوانید بازی خود را بدون نیاز به ویرایشگر بسازید. Unreal، اگرچه مشابه گودو نیست، کد منبع خود را به صورت رایگان در GitHub در دسترس دارد که می‌توانید آن را بردارید و هر کدام را که می‌خواهید اضافه یا ویرایش کنید. و یونیتی دارد… خب، بیایید در مورد یونیتی صحبت نکنیم.

به این ترتیب، می توانید به جو برنامه نویس و ابی هنرمند علاقه مند شوید. آیا می خواهید از رابط کاربری استفاده کنید؟ برو جلو. از بچگی روی سرت انداخته بودند و الان عقب افتاده ای و بدون UI از این موتور استفاده می کنی؟ مطمئنا، شما می توانید این کار را انجام دهید. و شما نباید بخش غیر UI موتور را برای راه اندازی و راه اندازی سخت کنید. حتی اگر گودو آن پلاگین GDNative را دارد، راه اندازی آن مشکل است. موتور اصلی در حال حاضر یک کتابخانه است. شما فقط می توانید آن کتابخانه را به کاربر بدهید و آنها می توانند هر طور که می خواهند از آن استفاده کنند.

حال، مهمترین چیز در مورد یک کتابخانه/چارچوب چیست؟ درست است. حالا با من بگو مامانت بله. کاربر. هر کسی که از این کتابخانه یا چارچوب استفاده می کند برای شما مهم ترین است.

خیلی وقت پیش (شاید مثل یک هفته پیش)، یک بازی سه بعدی خودم را تمام کردم. قبل از شروع بازی تمام تلاشم را کردم تا یک موتور برای آن بسازم. این بیشتر یک قالب بود تا یک موتور. ویرایشگر یا چیزی شبیه به آن نداشت. با این حال، ساخت بازی‌ها با OpenGL را آسان‌تر کرد. من مجبور نبودم یک خط OpenGL یا GLFW را لمس کنم. آیا می خواهید یک پنجره ایجاد کنید؟ فقط از این تابع استفاده کنید: window_create انجام شد. آیا می خواهید یک بافت بارگذاری کنید؟ انجام شد. دریافت ورودی؟ مشکلی نیست فکر می کردم همه چیز عالی است. فکر می کردم باهوش ترین آدم زنده ام! اما، مانند همه چیز در زندگی ام، اشتباه کردم. این وحشتناک ترین کتابخانه ای بود که تا به حال استفاده کردم. حتی بدتر از مامانت بله.

اسمش گراول بود (موتور نه مامانت). من فقط به اجرای موتور فکر کردم. چگونه می توانم یک مدل سه بعدی را بارگذاری کنم؟ چگونه می توانم بافت را بچرخانم؟ چگونه می توانم متن را رندر کنم (نشانه فلاش بک ویتنام)؟ فکر کردم و بعد اجراش کردم. به API واقعی فکر نمی کنید. برای من مهم نبود که کد من چگونه خواهد بود استفاده می شود. من فقط به این اهمیت می دادم که چگونه خواهد بود اجرا شد. در واقع، با تعداد زیادی از کتابخانه ها و چارچوب های من، همین مشکل وجود داشت. تنها فکری که من به آنها وارد کردم فقط پیاده سازی بود.

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

به عنوان مثال، فرض کنید شما تابعی به نام چیزی شبیه به زیر دارید: render_model. این تابع، همانطور که از نام آن پیداست، یک مدل سه بعدی را در موقعیت تبدیل مشخص شده ارائه می کند. حال، آن تابع چگونه پیاده سازی می شود؟ لعنتی مهم نیست بلکه سوال شماست باید سوال این است که این تابع چگونه توسط کاربر استفاده خواهد شد. آیا این عملکرد به روشی که در حال حاضر تنظیم شده برای ارائه یک مدل بدون دردسر مناسب است؟ آن را امتحان کنید. یک یا دو بازی با آن بسازید. شاید منطقی نباشد شاید این تابع به یک پارامتر اضافی نیاز داشته باشد. شاید اینطور نیست. شما نیاز دارند از کتابخانه خود استفاده کنید تا احساس کنید کاربر چگونه از آن استفاده خواهد کرد. برای یک بار هم که شده به اجرای آن فکر نکنید و فقط به کاربر فکر کنید. تمام نفرت و عصبانیتی را که از کتابخانه C++ STD متحمل شده‌اید بردارید و سعی کنید در اینجا مرد خوبی باشید.

ما به عنوان برنامه نویس عشق بیش از حد همه چیز را در نظر بگیریم ما به این موتور روشنایی اضافه خواهیم کرد. همچنین، مقداری مسیریابی Navmesh را اضافه خواهیم کرد. و بعد از صبحانه، آن الاغ آبدار را فتح خواهیم کرد. آرام باش تو یونیتی نیستی تو گودو نیستی و شما هستید نه مطمئنا غیر واقعیه شما فقط یک پسر هستید که سعی می کند کمی وقت آزاد را برای ساخت یک موتور بازی اختصاص دهد. یک موتور بازی که کسی درخواستش نکرد.

بیایید فرض کنیم شما در حال تلاش برای ساخت یک بازی مسابقه ای هستید. شما دو انتخاب دارید: از Unity استفاده کنید (به من شلیک کنید) یا از این موتور دیگر استفاده کنید. حالا، چون من شما را بیشتر از خودم می شناسم، می دانم که یونیتی را درست انتخاب می کردید؟ من حق دارم همیشه حق با من است. با این حال، آن موتور دیگر در واقع موتوری است که به طور خاص برای بازی های مسابقه ای ساخته شده است. بازی های زیادی با این موتور بازی ساخته و آزمایش شدند. تمام مشخصات و ابزارهایی را دارد که به شما در ساخت یک بازی مسابقه ای کمک می کند. حالا میشه با این موتور تیراندازی اول شخص درست کرد؟ خوب، بله. شما هنوز یک دوربین دارید که ممکن است به هر حال روی اول شخص تنظیم شود. راهی برای رندر کردن مدل ها و مش ها، بررسی برخوردها، حوادث آتش سوزی و غیره وجود دارد. هیچ چیز شما را از ساخت یک بازی FPS با این موتور باز نمی دارد. با این حال، شما از مطلق آن استفاده خواهید کرد کامل اگر با آن یک بازی مسابقه ای بسازید، امکان پذیر است.

و این مشکل یونیتی است. یونیتی در تلاش است تا چندین چیز در یک زمان باشد. در تلاش است تا بازار مستقل را جذب کند (مسلماً بزرگترین پایگاه کاربر آن تا به امروز) و، در عین حال سعی در تقلید از Unreal دارد. یونیتی در تلاش است تا رشته های زیادی را به یکباره بکشد که به پتانسیل آن آسیب می رساند. حداقل با Unreal، آن را می داند: یک موتور بازی بسیار توانا و قوی، آماده ساخت هر بازی سه بعدی که در ذهن دارید. و با گودو، سعی دارد برای آن مخاطبان مستقل جذاب باشد. ساخت بازی های کوچک و ساده که نیازی به پیچیدگی ابزارهای زیادی ندارد Unreal در اختیار شما قرار می دهد و در عین حال کاملاً قادر است.

من میگم باید نه آیا یک موتور بازی همه منظوره قادر به انجام هر بازی موجود است؟ نه هستم با این حال، گفتن این است که توجه خود را روی یک قسمت از موتور بازی متمرکز کنید. میلیون ها (بسیار زیاد اما لعنت به شما) موتور بازی وجود دارد. آنقدر زیاد که حتی می توان شمارش کرد. هرکدام از آنها یک ویژگی عجیب و غریب دارند. چیزی که آن را از بقیه متمایز می کند. هر کسی با تجربه قابل توجهی می تواند یک موتور بازی همه منظوره ایجاد کند. چه چیزی مال شما را اینقدر خاص می کند؟

شاید موتور شما واقعاً در ساخت بازی های استراتژیک بزرگ خوب باشد. شاید این موتوری باشد که به طور خاص برای بازی های ASCII در ترمینال طراحی شده است. شاید موتور شما نام عجیبی مانند Game Maker داشته باشد. ایو

یک بار بنویس و همه جا اجرا کن.

این جمله ای است که احتمالا قبلاً شنیده اید. جاوا، زبان برنامه نویسی فوق العاده، به عنوان زبانی به بازار عرضه شد که می توانست بر روی هر سیستمی اجرا شود. و به اعتبار آنها درست بود. ببینید، جاوا بر روی یک ماشین مجازی (VM) ساخته شده است. این به این معنی بود که برای ساده‌سازی بیش از حد، نیازی به نوشتن پیاده‌سازی خود روی هر CPU نبود. شما فقط می توانید برنامه جاوا و آن را بنویسید خواهد شد اجرا کنید.

اگر تا به حال سعی کرده اید یک بازی با یونیتی بسازید، می دانید که یونیتی می تواند بازی شما را در چندین پلتفرم بسازد و بسته بندی کند. ویندوز، لینوکس، مک، سوئیچ، اندروید، IOS و وب. حالا این شگفت انگیز است! هر بازی که بسازید می توانید آن را در هر جایی بازی کنید! انتظار داشته باشید که واقعاً اینطور نیست.

همان طور که من و شما می دانیم، کامپایل متقابل بسیار بد است. منظورم این است که می‌توانید برای این سیستم‌ها بسازید، اما پس از آن باید یک VM لینوکس راه‌اندازی کنید، یک کامپیوتر مک بگیرید، هم اندروید داشته باشید. و یک دستگاه IOS، بدانید که چگونه از emscripten یا چیزی شبیه به آن برای ساخت وب استفاده کنید، و در نهایت، باید یک SDK برای سوییچ از نینتندو دریافت کنید. آره این امکان پذیر نیست. شاید (شاید) بتوانید ویندوز و لینوکس را راه اندازی کنید. شاید حتی اگر سخت افزار مک را داشته باشید (که من شک دارم). اما ساختن برای موبایل؟ خب تو دارند داشتن یک کامپیوتر مک برای ساخت دستگاه IOS. اندروید ویژگی هایی دارد که باید یاد بگیرید و نگران آن باشید. و وب… خوب به این اهمیتی نمی دهد. ما فقط می توانیم به آن یک کوکی بدهیم. خوشحال خواهد شد

شما باید نبردهای خود را انتخاب و انتخاب کنید. به عنوان مثال، در حال حاضر، من می توانم هم برای ویندوز و هم برای لینوکس بسازم. وب و اندروید اگه میشه اذیت بشم. و، با وجود اینکه این درد برای هنری تودور من است، من هنوز هم می توانم آن را بدون مشکل انجام دهم. با این حال، سیستم عامل های دیگر؟ نه ممنون من برای 2.5 درصد از بازار دسکتاپ زمان و سلامت خود را به خطر نمی اندازم.

و این فقط مربوط به پلتفرم گرا بودن نیست. این در مورد هر چیزی است که در سفر موتورسازی خود با آن روبرو خواهید شد. در یک دنیای عالی برای من، من به هیچ کتابخانه ای نیاز ندارم. من مجبور نیستم هیچ کتابخانه ای را که برای پروژه ام نیاز دارم وارد یا کامپایل کنم. من فقط می توانم بسازم من پروژه و بس با این حال، من حوصله بارگذاری و خواندن فایل های PNG یا JPEG را ندارم. پس فقط استفاده کن stb_image برای آن در مورد صدا هم همینطور همین مورد در مورد بارگذاری فونت. با این حال، چند چیز وجود دارد من هستم مایل به صرف زمان برای. سر و کار داشتن با کتابخانه های مختلف سیستم عامل برای ایجاد و مدیریت ایجاد پنجره. فیزیک، ریاضی، رندر و مدیریت موجودیت. همه این چیزها را دوست دارم و می خواهم بیشتر در مورد آنها بیاموزم. من در واقع انجام دهید می خواهید زمانی را صرف کند و کاو عمیق تر در این موضوعات کنید.

اجازه دهید stb_image بافت های من را برای من مدیریت کنید. این یک کتابخانه بسیار قابل اعتماد است که من برای آن استفاده کرده ام بسیاری از پروژه های من من خیلی به بارگذاری تصویر اهمیت نمی دهم پس چرا که نه؟

شما باید نبردهای خود را انتخاب کنید. شما نمی توانید همه چیز را به تنهایی انجام دهید. مطمئن شوید که نه وقت خود را برای چیزی که برایتان مهم نیست تلف کنید. در نهایت ساخت موتور یک سرگرمی است. اینطوری باهاش ​​رفتار کن برای همیشه.

بنابراین، پس از همه اینها، چه فایده ای دارد؟ منظورم از این همه غوغا چه بود… آره. خوب، اینها افکاری است که من در بخش بهتری از یک سال داشتم. من می خواستم خودم را بسازم خود موتور بازی اما من هیچ وقت مناسبی پیدا نکردم. می‌خواستم چیزی بسازم که بتوانم به مردم نشان دهم. موتوری که در واقع می توانم برای بازی های خودم بدون استفراغ از انزجار و عصبانیت از آن استفاده کنم.

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

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

ما همیشه در مورد بازی رویایی می شنویم. بازی ای که هر بازی توسعه دهنده امیدوار است بسازد. چه یک RPG جهان باز با مکانیک های Dark Souls و شخصیت های بامزه مانند Animal Crossing یا یک کلون Legend Of Zelda با عناصر ترسناک، اما ما هرگز در مورد موتورهای بازی رویایی نمی شنویم؟

یک دلیل بزرگ برای آن وجود دارد: شما از آنچه در دسترس است استفاده می کنید. اگر یک توسعه دهنده مستقل هستید، احتمالاً فقط از Unity، Godot یا Unreal استفاده می کنید. بدیهی است که اشکالی ندارد. اما، اگر مانند من هستید – از نظر ذهنی آشفته هستید، احتمالاً موتور بازی خود را می سازید یا حتی بازی های خود را از ابتدا می سازید.

بنابراین، در این پست، من در مورد آن صحبت خواهم کرد. موتور بازی رویاهای من. چیزی که می خواهم برای همیشه از آن استفاده کنم. اونی که دوست دارم باهاش ​​ازدواج کنم و بچه های بازی باهاش ​​داشته باشم. موتور بازی که آرزو دارم با آن بمیرم…

صبر کن در مورد چی صحبت می کردیم؟؟ اوه…

قبل از اینکه موتور بازی Goth کامل و مرتب و بزرگ خود را که می‌خواهم خفه‌ام کنم برای شما شرح دهم، ابتدا به ایده‌هایم برای موتور بازی “عالی” می‌پردازم. تصور هرکسی از یک موتور بازی عالی متفاوت است. بنابراین، منصفانه است که من به شما بدهم من فلسفه های خود در مورد کتابخانه ها و استفاده از آنها و به طور خاص موتورهای بازی. من همچنین می خواهم این را با بیان اینکه این است مقدمه کنم من نظر شما ممکن است نظر دیگری داشته باشید و آن هم همین است به طور کامل باشه شاید فکر کنید من اشتباه می کنم. مشکلی نیست دوست دارم بشنوم چرا اما همیشه به یاد داشته باشید، من فقط خودم را بیان می کنم نظر و نه فقط سخت حقایق. این نظرات در معرض تغییر هستند، بنابراین این را به عنوان کتاب مقدس ساخت موتورهای بازی نگیرید.

خوبه؟ باشه خوبه حالا بیایید شروع کنیم.

استفاده از رابط کاربری موتور برای ساخت بازی شما عالی است! یک دکمه برای افزودن یک موجودیت به صحنه. یک دکمه برای اضافه کردن یک گره فرزند. چند دکمه برای متحرک سازی چند دکمه دیگر برای افزودن دوربین. با این حال من یک برنامه نویس هستم. و این احساسی است که قرار است در سراسر این پست تکرار شود. من دوست دارم کارها را به روش کثیف انجام دهم. روی زانوهای من بیا و… متوجه موضوع می شوی. فشردن یک دکمه برای افزودن یک صحنه برای من شهودی نیست. ساختن یک class یا الف struct برای نگهداری اطلاعات صحنه استبا این حال، برای مغز برنامه نویس من شهودی است.

ممکن است خلاص شدن از شر رابط کاربری غیر منطقی به نظر برسد و … اینطور است. اصلاً نداشتن رابط کاربری برای موتورتان بهترین ایده نیست. به خصوص اگر بخواهید موتور شما توسط طیف گسترده ای از کارگران استفاده شود بسیار بد است. هنرمندان، نوازندگان، طراحان، و آنچه شما دارید. وادار کردن هنرمندی (که پیش از این هرگز در زندگی خود کدنویسی نکرده بود) فقط برای افزودن یک موجودیت، وارد پایگاه کدهای مزخرف شما شود، به جز اینکه بگوییم، کاملاً یک کار است. وحشتناک ایده با این حال، من نمی خواهم برنامه نویس معتبر را مجبور کنم که خیلی راحت باشد و از دکمه ها برای انجام کار نیز استفاده کند. بنابراین، راه حل در اینجا چیست؟

به نظر من، یک موتور دو بخش جداگانه دارد:
هسته: اینجاست که تمام منطق اساسی موتور وجود دارد. رندر، ایجاد پنجره، ادغام رویداد، ورودی، موجودیت و مدیریت صحنه و غیره.
ویرایشگر: این جایی است که قسمت جلوی موتور قرار دارد. این لایه توابع را از هسته به عنوان مثال، هنگامی که یک دکمه کلیک می شود، لایه موتور.

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

قبلاً نمونه هایی از این وجود دارد. Godot به شما اجازه می دهد به لایه C++ خود دسترسی داشته باشید تا بتوانید بازی خود را بدون نیاز به ویرایشگر بسازید. Unreal، اگرچه مشابه گودو نیست، کد منبع خود را به صورت رایگان در GitHub در دسترس دارد که می‌توانید آن را بردارید و هر کدام را که می‌خواهید اضافه یا ویرایش کنید. و یونیتی دارد… خب، بیایید در مورد یونیتی صحبت نکنیم.

به این ترتیب، می توانید به جو برنامه نویس و ابی هنرمند علاقه مند شوید. آیا می خواهید از رابط کاربری استفاده کنید؟ برو جلو. از بچگی روی سرت انداخته بودند و الان عقب افتاده ای و بدون UI از این موتور استفاده می کنی؟ مطمئنا، شما می توانید این کار را انجام دهید. و شما نباید بخش غیر UI موتور را برای راه اندازی و راه اندازی سخت کنید. حتی اگر گودو آن پلاگین GDNative را دارد، راه اندازی آن مشکل است. موتور اصلی در حال حاضر یک کتابخانه است. شما فقط می توانید آن کتابخانه را به کاربر بدهید و آنها می توانند هر طور که می خواهند از آن استفاده کنند.

حال، مهمترین چیز در مورد یک کتابخانه/چارچوب چیست؟ درست است. حالا با من بگو مامانت بله. کاربر. هر کسی که از این کتابخانه یا چارچوب استفاده می کند برای شما مهم ترین است.

خیلی وقت پیش (شاید مثل یک هفته پیش)، یک بازی سه بعدی خودم را تمام کردم. قبل از شروع بازی تمام تلاشم را کردم تا یک موتور برای آن بسازم. این بیشتر یک قالب بود تا یک موتور. ویرایشگر یا چیزی شبیه به آن نداشت. با این حال، ساخت بازی‌ها با OpenGL را آسان‌تر کرد. من مجبور نبودم یک خط OpenGL یا GLFW را لمس کنم. آیا می خواهید یک پنجره ایجاد کنید؟ فقط از این تابع استفاده کنید: window_create انجام شد. آیا می خواهید یک بافت بارگذاری کنید؟ انجام شد. دریافت ورودی؟ مشکلی نیست فکر می کردم همه چیز عالی است. فکر می کردم باهوش ترین آدم زنده ام! اما، مانند همه چیز در زندگی ام، اشتباه کردم. این وحشتناک ترین کتابخانه ای بود که تا به حال استفاده کردم. حتی بدتر از مامانت بله.

اسمش گراول بود (موتور نه مامانت). من فقط به اجرای موتور فکر کردم. چگونه می توانم یک مدل سه بعدی را بارگذاری کنم؟ چگونه می توانم بافت را بچرخانم؟ چگونه می توانم متن را رندر کنم (نشانه فلاش بک ویتنام)؟ فکر کردم و بعد اجراش کردم. به API واقعی فکر نمی کنید. برای من مهم نبود که کد من چگونه خواهد بود استفاده می شود. من فقط به این اهمیت می دادم که چگونه خواهد بود اجرا شد. در واقع، با تعداد زیادی از کتابخانه ها و چارچوب های من، همین مشکل وجود داشت. تنها فکری که من به آنها وارد کردم فقط پیاده سازی بود.

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

به عنوان مثال، فرض کنید شما تابعی به نام چیزی شبیه به زیر دارید: render_model. این تابع، همانطور که از نام آن پیداست، یک مدل سه بعدی را در موقعیت تبدیل مشخص شده ارائه می کند. حال، آن تابع چگونه پیاده سازی می شود؟ لعنتی مهم نیست بلکه سوال شماست باید سوال این است که این تابع چگونه توسط کاربر استفاده خواهد شد. آیا این عملکرد به روشی که در حال حاضر تنظیم شده برای ارائه یک مدل بدون دردسر مناسب است؟ آن را امتحان کنید. یک یا دو بازی با آن بسازید. شاید منطقی نباشد شاید این تابع به یک پارامتر اضافی نیاز داشته باشد. شاید اینطور نیست. شما نیاز دارند از کتابخانه خود استفاده کنید تا احساس کنید کاربر چگونه از آن استفاده خواهد کرد. برای یک بار هم که شده به اجرای آن فکر نکنید و فقط به کاربر فکر کنید. تمام نفرت و عصبانیتی را که از کتابخانه C++ STD متحمل شده‌اید بردارید و سعی کنید در اینجا مرد خوبی باشید.

ما به عنوان برنامه نویس عشق بیش از حد همه چیز را در نظر بگیریم ما به این موتور روشنایی اضافه خواهیم کرد. همچنین، مقداری مسیریابی Navmesh را اضافه خواهیم کرد. و بعد از صبحانه، آن الاغ آبدار را فتح خواهیم کرد. آرام باش تو یونیتی نیستی تو گودو نیستی و شما هستید نه مطمئنا غیر واقعیه شما فقط یک پسر هستید که سعی می کند کمی وقت آزاد را برای ساخت یک موتور بازی اختصاص دهد. یک موتور بازی که کسی درخواستش نکرد.

بیایید فرض کنیم شما در حال تلاش برای ساخت یک بازی مسابقه ای هستید. شما دو انتخاب دارید: از Unity استفاده کنید (به من شلیک کنید) یا از این موتور دیگر استفاده کنید. حالا، چون من شما را بیشتر از خودم می شناسم، می دانم که یونیتی را درست انتخاب می کردید؟ من حق دارم همیشه حق با من است. با این حال، آن موتور دیگر در واقع موتوری است که به طور خاص برای بازی های مسابقه ای ساخته شده است. بازی های زیادی با این موتور بازی ساخته و آزمایش شدند. تمام مشخصات و ابزارهایی را دارد که به شما در ساخت یک بازی مسابقه ای کمک می کند. حالا میشه با این موتور تیراندازی اول شخص درست کرد؟ خوب، بله. شما هنوز یک دوربین دارید که ممکن است به هر حال روی اول شخص تنظیم شود. راهی برای رندر کردن مدل ها و مش ها، بررسی برخوردها، حوادث آتش سوزی و غیره وجود دارد. هیچ چیز شما را از ساخت یک بازی FPS با این موتور باز نمی دارد. با این حال، شما از مطلق آن استفاده خواهید کرد کامل اگر با آن یک بازی مسابقه ای بسازید، امکان پذیر است.

و این مشکل یونیتی است. یونیتی در تلاش است تا چندین چیز در یک زمان باشد. در تلاش است تا بازار مستقل را جذب کند (مسلماً بزرگترین پایگاه کاربر آن تا به امروز) و، در عین حال سعی در تقلید از Unreal دارد. یونیتی در تلاش است تا رشته های زیادی را به یکباره بکشد که به پتانسیل آن آسیب می رساند. حداقل با Unreal، آن را می داند: یک موتور بازی بسیار توانا و قوی، آماده ساخت هر بازی سه بعدی که در ذهن دارید. و با گودو، سعی دارد برای آن مخاطبان مستقل جذاب باشد. ساخت بازی های کوچک و ساده که نیازی به پیچیدگی ابزارهای زیادی ندارد Unreal در اختیار شما قرار می دهد و در عین حال کاملاً قادر است.

من میگم باید نه آیا یک موتور بازی همه منظوره قادر به انجام هر بازی موجود است؟ نه هستم با این حال، گفتن این است که توجه خود را روی یک قسمت از موتور بازی متمرکز کنید. میلیون ها (بسیار زیاد اما لعنت به شما) موتور بازی وجود دارد. آنقدر زیاد که حتی می توان شمارش کرد. هرکدام از آنها یک ویژگی عجیب و غریب دارند. چیزی که آن را از بقیه متمایز می کند. هر کسی با تجربه قابل توجهی می تواند یک موتور بازی همه منظوره ایجاد کند. چه چیزی مال شما را اینقدر خاص می کند؟

شاید موتور شما واقعاً در ساخت بازی های استراتژیک بزرگ خوب باشد. شاید این موتوری باشد که به طور خاص برای بازی های ASCII در ترمینال طراحی شده است. شاید موتور شما نام عجیبی مانند Game Maker داشته باشد. ایو

یک بار بنویس و همه جا اجرا کن.

این جمله ای است که احتمالا قبلاً شنیده اید. جاوا، زبان برنامه نویسی فوق العاده، به عنوان زبانی به بازار عرضه شد که می توانست بر روی هر سیستمی اجرا شود. و به اعتبار آنها درست بود. ببینید، جاوا بر روی یک ماشین مجازی (VM) ساخته شده است. این به این معنی بود که برای ساده‌سازی بیش از حد، نیازی به نوشتن پیاده‌سازی خود روی هر CPU نبود. شما فقط می توانید برنامه جاوا و آن را بنویسید خواهد شد اجرا کنید.

اگر تا به حال سعی کرده اید یک بازی با یونیتی بسازید، می دانید که یونیتی می تواند بازی شما را در چندین پلتفرم بسازد و بسته بندی کند. ویندوز، لینوکس، مک، سوئیچ، اندروید، IOS و وب. حالا این شگفت انگیز است! هر بازی که بسازید می توانید آن را در هر جایی بازی کنید! انتظار داشته باشید که واقعاً اینطور نیست.

همان طور که من و شما می دانیم، کامپایل متقابل بسیار بد است. منظورم این است که می‌توانید برای این سیستم‌ها بسازید، اما پس از آن باید یک VM لینوکس راه‌اندازی کنید، یک کامپیوتر مک بگیرید، هم اندروید داشته باشید. و یک دستگاه IOS، بدانید که چگونه از emscripten یا چیزی شبیه به آن برای ساخت وب استفاده کنید، و در نهایت، باید یک SDK برای سوییچ از نینتندو دریافت کنید. آره این امکان پذیر نیست. شاید (شاید) بتوانید ویندوز و لینوکس را راه اندازی کنید. شاید حتی اگر سخت افزار مک را داشته باشید (که من شک دارم). اما ساختن برای موبایل؟ خب تو دارند داشتن یک کامپیوتر مک برای ساخت دستگاه IOS. اندروید ویژگی هایی دارد که باید یاد بگیرید و نگران آن باشید. و وب… خوب به این اهمیتی نمی دهد. ما فقط می توانیم به آن یک کوکی بدهیم. خوشحال خواهد شد

شما باید نبردهای خود را انتخاب و انتخاب کنید. به عنوان مثال، در حال حاضر، من می توانم هم برای ویندوز و هم برای لینوکس بسازم. وب و اندروید اگه میشه اذیت بشم. و، با وجود اینکه این درد برای هنری تودور من است، من هنوز هم می توانم آن را بدون مشکل انجام دهم. با این حال، سیستم عامل های دیگر؟ نه ممنون من برای 2.5 درصد از بازار دسکتاپ زمان و سلامت خود را به خطر نمی اندازم.

و این فقط مربوط به پلتفرم گرا بودن نیست. این در مورد هر چیزی است که در سفر موتورسازی خود با آن روبرو خواهید شد. در یک دنیای عالی برای من، من به هیچ کتابخانه ای نیاز ندارم. من مجبور نیستم هیچ کتابخانه ای را که برای پروژه ام نیاز دارم وارد یا کامپایل کنم. من فقط می توانم بسازم من پروژه و بس با این حال، من حوصله بارگذاری و خواندن فایل های PNG یا JPEG را ندارم. پس فقط استفاده کن stb_image برای آن در مورد صدا هم همینطور همین مورد در مورد بارگذاری فونت. با این حال، چند چیز وجود دارد من هستم مایل به صرف زمان برای. سر و کار داشتن با کتابخانه های مختلف سیستم عامل برای ایجاد و مدیریت ایجاد پنجره. فیزیک، ریاضی، رندر و مدیریت موجودیت. همه این چیزها را دوست دارم و می خواهم بیشتر در مورد آنها بیاموزم. من در واقع انجام دهید می خواهید زمانی را صرف کند و کاو عمیق تر در این موضوعات کنید.

اجازه دهید stb_image بافت های من را برای من مدیریت کنید. این یک کتابخانه بسیار قابل اعتماد است که من برای آن استفاده کرده ام بسیاری از پروژه های من من خیلی به بارگذاری تصویر اهمیت نمی دهم پس چرا که نه؟

شما باید نبردهای خود را انتخاب کنید. شما نمی توانید همه چیز را به تنهایی انجام دهید. مطمئن شوید که نه وقت خود را برای چیزی که برایتان مهم نیست تلف کنید. در نهایت ساخت موتور یک سرگرمی است. اینطوری باهاش ​​رفتار کن برای همیشه.

بنابراین، پس از همه اینها، چه فایده ای دارد؟ منظورم از این همه غوغا چه بود… آره. خوب، اینها افکاری است که من در بخش بهتری از یک سال داشتم. من می خواستم خودم را بسازم خود موتور بازی اما من هیچ وقت مناسبی پیدا نکردم. می‌خواستم چیزی بسازم که بتوانم به مردم نشان دهم. موتوری که در واقع می توانم برای بازی های خودم بدون استفراغ از انزجار و عصبانیت از آن استفاده کنم.

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

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

نوشته های مشابه

دیدگاهتان را بنویسید

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

دکمه بازگشت به بالا