موتور بازی سازی Unity

در این مقاله قصد دارم به تاریخچه‌ی یونیتی، کاربردهای آن در صنایع گوناگون و چیستی آن بپردازم. اما قبل از آن بهتر است درباره چگونگی کارکرد یونیتی از پایه صحبت کنیم. به نوعی این مقاله به شما دیدی از ریشه‌ی یونیتی و زمینه‌های شغلی توسعه دهندگان آن می‌دهد.معنی real-time چیست؟اصطلاح real-time (بلادرنگ - به‌موقع) به سرعت پدیدار شدن یک عکس در صفحه یا به اصطلاح رندر گرفتن آن استفاده می‌شود. به صورت کلی هدف این است که عکس‌ها آنقدر سریع پدیدار شوند که کاربر بدون هیچ درنگی و آزادانه بتواند با پروژه تعامل داشته باشد. اگر یک پروژه real-time باشد کاربر هیچ‌وقت به این فکر نمی‌کند که این تصاویر دائما در حال عوض شدن هستند و به جای آن به محتوای پروژه فکر می‌کند. موتور بازی‌سازی unity یکی از آن ابزارهایی است که برای افرادی که از آن برای ساخت پروژه‌هایشان استفاده می‌کنند و هم برای کاربران نهایی آن از real-time استفاده می‌شود.در گذشته کامپیوترها آنقدر قدرتمند نبودند تا صحنه‌های بصری با انواع نور و افکت‌های فیزیکی را بتوانند رندر بگیرند و حتی رندر گرفتن یک عکس ساده ممکن بود ساعت‌ها‍ و حتی رو‌زها طول بکشد. هرباری که خالقان می‌خواستند اثر خود را ببینند ساعت‌ها طول می‌کشید و تنظیم مجدد آن نیز بسیار هزینه‌بر و زمان‌بر بود و به همین دلیل خیلی از ایده‌هایی که می‌توانست کیفیت نهایی پروژه را بهبود ببخشد نادیده گرفته می‌شد.به این نوع رندرها رندرهای آفلاین گفته می‌شود که می‌توان از آن‌ها در صنعت فیلم‌سازی استفاده کرد؛ اما در صنعت‌های تعاملی مانند بازی‌سازی که کاربر توقع دارد آنچه را که می‌بیند کنترل کند کارایی ندارند. رشد این صنعت نیز بخاطر تقاضای کاربران برای تعامل اتفاق افتاد.امروزه ابزار real-time چگونه استفاده می‌شوند؟در دنیای امروزه unity از واقعیت فراتر رفته است و می‌تواند نور و افکت‌های واقعی را کاملا صحیح ارائه کند و همچنین از فیزیک استفاده کند. در دنیای امروزه اگر پروژه‌ای از تعاملات دنیای واقعی دور شود تصمیم طراح آن این بوده است، نه محدودیت ابزارهای موجود. شاید هنوز unity به کیفیت ابزارهای آفلاین نرسیده باشد اما این اتفاق زودتر از آنچه فکر کنید رخ خواهد داد.عکس از فیلم کوتاه The Heretic است که با یونیتی ساخته شده است. در این‌جا می‌توانید فیلم را به صورت کامل ببینید.اگر یک پروژه نیازمند کیفیت بسیار خاص و بالایی باشد از ابزارهای آفلاین استفاده می‌شود. در غیر این صورت مزایای حذف این ابزارها بسیار بالا است. سازندگانی که پروژه های خود را به real-time انتقال می‌دهند روزها و ماه‌های زیادی را از چرخه‌ی تولید خود حذف می‌کنند و زمان بیشتری را برای آزمایش ایده‌های جدید خواهد داشت. به نوعی با این ابزارها سازندگان همه‌ی زمان خود را صرف تولید می‌کنند.موتور بازی سازی چیست؟فرآیند تولید بازی پیچیده‌تر از آنی است که به نظر می‌رسد. کامپیوتر یا موبایلی که شما این صفحه را در آن می‌خوانید سیستم‌عاملی را اجرا می‌کند که برق را به محتوای صفحه‌ی نمایش شما تبدیل می‌کند، روشنایی صفحه را مطابق با تنظیمات شما نگه می‌دارد و به اینترنت وصل می‌شود تا عکس یا متنی را به شما نشان دهد. همچنین، کارهای زیادی را هم‌زمان در پس‌زمینه انجام می‌دهد، مثل دسترسی دادن کامپیوتر به منبع انرژی آن. و همه‌ی این‌ها فقط برای نمایش یک عکس است.حال فکر کنید که می‌خواهید کاری بیشتر از نمایش یا خواندن انجام دهید، مثل نوشتن یک ایمیل. برای این کار تمرکز شما باید روی محتوا باشد، نه ساختار درونی ایمیل و اتفاقاتی که در پس‌زمینه‌ی آن می‌افتد. این دقیقا هدف موتور بازی است. موتور بازی‌سازی نقطه‌ی اتصالی برای تمام قطعات یک بازی است. بازی مانند تمام برنامه‌های دیگر از موارد کوچک‌تری مثل مدل‌های سه بعدی، فایل‌های صدا و کدها (scripts) تشکیل شده است که وقتی کنار هم قرار می‌گیرند، تجربه‌ی کاربری کاملی را تشکیل می‌دهند. موتور بازی سازی مانند unity نقطه‌ی اتصال تمام قطعات یک بازی استهمانند سیستم عامل، موتور بازی‌سازی نیز مطمئن می‌شود تا بازی شما به درستی در دستگاهی که انتخاب کرده‌اید اجرا شود. این شامل پخش تمام صداهای تعریف شده، تعامل داشتن اشیا با بقیه اشیا و ... است.با موتور بازی سازی چه کارهایی می‌توان انجام داد؟در موتور بازی‌سازی سازنده هر چیزی را که کاربر در محصول نهایی تجربه می‌کند، کنار هم قرار می‌دهد. اگر محصول نهایی یک بازی است، سازنده Game play آن را - مانند پریدن بر روی اشیا مختلف - طراحی می‌کند. اگر محصول نهایی واقعیت مجازی است، سازنده محیطی را که کاربر در آن قدم می‌زند طراحی می‌کند.موتور بازی‌سازی به سازندگان این امکان را می‌دهد تا محصول را به یک تجربه‌ی تعاملی تبدیل کنند. خیلی چیزهای بیشتری وجود دارد که unity آن‌ها در پس‌زمینه انجام می‌دهد تا تمرکز توسعه‌دهندگان بر روی تجربه‌ی کاربری باقی بماند.چه کارهایی را نمی‌توان با موتور بازی‌سازی انجام داد؟در موتور بازی‌سازی شما asset های (اشیاء و صداهایی که از اصلی ترین قسمت های تجربه کاربری هستند) مورد نظرتان را نمی‌سازید. به آیتم‌هایی که در بازی یا پروژه‌ی خود استفاده می‌کنید Asset گفته می‌شود. این فایل‌ها ممکن است خارج از یونیتی ساخته شده باشند، مانند مدل‌های سه‌بعدی، فایل‌های صدا، عکس‌ها و یا هر نوع فایل دیگری که یونیتی از آن پشتیبانی می‌کند.این فایل‌ها در ابزارهای خارجی تخصصی که اصطلاحا به آن‌ها Digital Content Creation (DCC) یا ابزارهای ایجاد محتوای دیجیتال گفته می‌شود ساخته می‌شوند. بسیاری از این ابزارها توسط یونیتی پشتیبانی می‌شوند تا فرآیند وارد کردن آن‌ها به موتور بازی‌سازی ساده‌تر باشد.رایج‌ترین ابزارهایی که در تولید DCC ها استفاده می‌شود موارد زیر هستند:از 3D DCCs برای ایجاد مدل‌‌ها، کاراکترها و محیط‌های سه‌بعدی استفاده می‌شود، مانند Maya - ZBrush و Blenderاز 2D DCCs برای ایجاد تصاویر دوبعدی مانند عکس‌ها، طرح‌ها و رابط‌ها استفاده می‌شود، مانند Photoshop - illustrator و Gimpاز Audio DCCs برای ضبط، ویرایش و ترکیب صداها استفاده می‌شود، مانند Audition - Logic Pro و Audacityاز Integrated Development Environments (IDEs) برای کدنویسی به زبان‌های مختلف استفاده می‌شود، مانند Visual Studioو در نهایت از Real-time Engines برای توسعه، رندر و انتشار محتویات سه‌بعدی برنامه‌ها استفاده می‌شود، مانند Unity و Unrealداستان Unityاولین محصولی که با تکنولوژی unity منتشر شد موتور بازی سازی نبود، بلکه یک بازی بود.GooBall در سال ۲۰۰۵، بنیانگذاران یونیتی، یواخیم آنته، دیوید هلگاسون و نیکلاس فرانسیس، یک سال پس از تشکیل شرکت خود، بازی ویدیویی GooBall را برای MacOS منتشر کردند که در آن زمان Over the Edge Entertainment نام داشت.قبل از یونیتی بازی‌ها چگونه ساخته می‌شدند؟در آن زمان اکثر شرکت‌ها موتور بازی‌سازی خود را داشتند و گاهی برای هر بازی یک موتور مخصوص با توجه به مفاهیم بازی ساخته می‌شد. این بدین معنی است که اگر تغییری در مفهوم بازی ایجاد می‌شد هم بازی باید تغییر می‌کرد و هم موتور آن و برای انتشار یک بازی زمان بسیار زیادی صرف می‌شد.برای تیم‌های کوچک یا انفرادی که می‌خواستند بازی خود را تولید کنند داشتن موتور بازی‌سازی تقریبا ناممکن بود، چرا که ساخت یک موتور بازی‌سازی نیازمند تجربه‌ی زیاد در برنامه‌نویسی، دانش فنی بالا و زمان زیادی است. به همین دلیل تا اوایل دهه‌ی ۲۰۰۰ توسعه‌ی بازی‌های مستقل بسیار کم بود و از نظر تجاری این بازی‌ها به‌ندرت موفق بودند.تولد یک موتوربازی GooBall موفق نبود اما یونیتی چرا. این موتور اولین بار در کنفرانس جهانی توسعه‌دهندگان اپل به نمایش گذاشته شد. در ابتدا مورد استفاده‌ی افراد کمی قرار گرفت؛ اما بسیار سریع با استقبال توسعه‌دهندگان مستقل روبه‌رو شد.یونیتی در اواسط دهه‌ی ۲۰۰۰ وارد بازار شد، زمانی که چهره‌ی صنعت بازی‌سازی شروع به تغییر کرده بود. یونیتی به عنوان بخش مهمی از انقلاب بازی‌های مستقل قرار داشت.زمانی که یونیتی برای اولین بار ارائه شد، دو ویژگی مثبت داشت که آن را از دیگر موتورها متمایز می‌کرد.اول این که این موتور قیمت مقرون به صرفه‌ای داشت و دوم این که تمرکز خود را بر روی ایجاد تجربه‌ی خوب توسعه‌دهندگان نیز گذاشته بود.چه صنعت هایی از Unity استفاده می‌کنند؟ (app)یونیتی فقط مخصوص یک صنعت نیست، هر صنعتی که بخواهد محتوایی قابل تعامل تولید کند می‌تواند از مزایای یونیتی استفاده کند.بازییونیتی برای ساخت هزاران بازی در بیست پلتفرم مختلف ساخته شده است. حدود نیمی از بازی‌هایی که در کامپیوتر، کنسول، اندروید و ... انجام می‌دهید و حدود ۶۰ درصد از بازی های XR (واقعیت افزوده، مجازی و ترکیبی) توسط یونیتی ساخته شده‌اند. پس اگر شما از بازی کردن لذت می‌برید، احتمالا بازی‌ای که با یونیتی ساخته شده باشد را امتحان کرده‌اید. در اینجا چند نمونه از بازی‌های توسعه‌داده شده با یونیتی را می‌بینید.رسانه و سرگرمیرسانه و سرگرمی شامل صنعت‌های مختلف اما نزدیک به هم است، مانند فیلم، انیمیشن و تبلیغات و ... در این‌جا برخلاف بازی‌ها از یونیتی برای تولید محتوای غیرتعاملی استفاده می‌شود. به این معنی که ممکن است تماشاگران ندانند از یونیتی برای ساخت آن استفاده شده است؛ اما توسعه‌دهندگان مزایای یونیتی را به ابزارهای دیگر ترجیح داده‌اند و از قابلیت‌های بصری و انیمیشن‌های آن استفاده کرده‌اند.با یونیتی در زمان رندر صرفه جویی می‌شود و به استودیوها اجازه می‌دهد محتوایی با کیفیت بیشتر را در زمان کمتری انتشار دهند. همچنین قابلیت اکتشاف در محیط‌هایی مانند واقیت مجازی و واقعیت افزوده را به توسعه‌دهندگان می‌دهد. در سال ۲۰۱۹ بیشتر از ۶۵ درصد محتویات فستیوال ساندنس فیلم با یونیتی ساخته شده بود.در این فیلم درباره‌ی استفاده از یونیتی در این صنعت و همچنین همکاری دیزنی با آن‌ها توضیحات بیشتری داده شده است.معماری، مهندسی و ساخت‌و‌ساز (AEC)تقریبا تمام محیط‌های اطراف ما، از خانه‌ها گرفته تا اماکن عمومی، توسط فعالین این صنعت ساخته شده‌اند. با استفاده از یونیتی این امکان برای شرکت‌ها فراهم می‌شود تا طراحی‌های سنتی و تکنیک‌های ساختمانی را با تکنولوژی ترکیب کنند و با سرعت بیشتر به طرحی ایمن‌تر بسازند. یکی از کاربرد‌های محسوس آن، تجسم محیط‌های سه‌بعدی قبل از ساخته شدن آن‌هاست تا بتوان جزئیات واقعی آن‌ها را دید. استفاده از XR حتی می‌تواند تصاویر واقعی‌تری به ما نشان بدهد.در این فیلم مورتنسون، عضو یکی از شرکت های AEC که امروز از Unity استفاده می‌کند در این‌باره صحبت‌های بیشتری می‌کند.خودرو، حمل‌ونقل و تولید (ATM)از ده تولیدکننده‌ی بزرگ خودرو هشت نفر از آن‌ها از یونیتی استفاده می‌کنند. یونیتی کاربردهای مختلفی برای آن‌ها دارد و هزینه‌های تولید را کاهش می‌دهد. مهندسان ساخت خودرو، از واقعیت افزوده برای ساخت طرح‌های محصول استفاده می‌کنند. همچنین برای بازاریابان این امکان فراهم می‌شود تا بتوانند ماشین‌های سفارشی مختلف را به مشتریان خود در محیط‌های مختلف نشان بدهند. در این فیلم درباره‌ی کاربرد یونیتی در صنعت خودرو توضیحات بیشتری داده شده است.از این موتور بازی‌سازی برای برنامه‌های دیگر نیز استفاده می‌شود. از مزایای آن می‌توان به موارد زیر اشاره کرد:محتوای تعاملی به راحت‌ترین روش‌ها ساخته می‌شودمحصول نهایی را همیشه می‌بینیدمجددا از محتواهای ساخته‌شده در پروژه های دیگر استفاده می‌کنیدهمکاری آسان‌تری با اعضای تیم داریدبهترین راه برای یادگیری، تجربه‌ی آن بطور شخصی است. در این لینک می‌توانید پنج کاربرد مختلف آن را در صنعت ببینید. این‌ها نمونه‌های کوچکی هستند اما می‌توانند کاربردهای واقعی یونیتی را به شما نشان دهند.سارا برادران افتخاریدکتر مریم حاجی اسمعیلی. دکترای علوم کامپیوتر از دانشگاه کینگستون لندنDr.Maryam HajiesmaeiliPhD of computer science from Kingston university of Londonhttps://ir.linkedin.com/in/dr-maryam-hajiesmaeili-90930743منابعhttps://learn.unity.com/tutorial/what-is-real-timehttps://learn.unity.com/tutorial/what-is-unityhttps://unity3d.com/quick-guide-to-unity-asset-storehttps://learn.unity.com/tutorial/what-can-unity-do