نحوه راه اندازی گوشی های هوشمند و رایانه های شخصی. پرتال اطلاعاتی
  • خانه
  • اهن
  • Unreal vs Unity: کدام یک برای توسعه بازی های موبایل بهتر است؟ نتایج محک. نرخ فریم

Unreal vs Unity: کدام یک برای توسعه بازی های موبایل بهتر است؟ نتایج محک. نرخ فریم

در درس های قبل، منظره، ساختمان ها و آیتم های بیرونی را مدل سازی و بافت بندی کردیم. حال چگونه می توان همه این اشیاء را در یک صحنه ترکیب کرد و آنها را در مکان های مناسب قرار داد؟ کجا می توان اشیاء گم شده را پیدا کرد - ماشین ها، درختان، بوته ها، گل ها؟ در این درس با این موضوع آشنا خواهیم شد.

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

1. درج اشیاء از فایل های دیگر.

1. فایل landscape را باز کنید. در این فایل است که تمام اشیاء دیگر را وارد کرده و روی منظره ترسیم شده قرار می دهیم.

2. درج ساختمان ها. برای این کار به منو بروید فایل(فایل) > روی فلش کنار دکمه کلیک کنید وارد كردن(واردات) > ادغام(ترکیب) (شکل 1).

برنج. 1. با استفاده از دستور Merge

3. در پنجره باز شده فایل مورد نیاز را انتخاب کرده و کلیک کنید باز کن(باز) (شکل 2).


برنج. 2. انتخاب فایل مورد نظر

4. یک پنجره ظاهر شده است ادغام(Merge)، که نام تمام اشیاء را از فایل پیوست فهرست می کند. ما فقط به ساختمان نیاز داریم. برای انتخاب فقط اشیایی که نیاز داریم، در حالی که کلید را نگه دارید، روی آنها کلیک کنید ctrl. کلیک خوب(شکل 3).


برنج. 3. انتخاب اشیاء مورد نیاز

اشیاء انتخاب شده در صحنه افقی قرار می گیرند (شکل 4).


برنج. 4. درج اشیاء

تمرین 1

تمام موارد بیرونی را خودتان در یک فایل قرار دهید (شکل 5).


برنج. 5. درج اقلام خارجی

توجه داشته باشید:اگر تمام اشیاء را روی لایه‌های خود قرار دهید، وقتی این اشیاء را در فایل دیگری قرار دهید، لایه‌ها نیز کپی می‌شوند. بنابراین، اگر طبق آنچه در درس ها توضیح داده شد، وجداناً لایه هایی ایجاد کردید، اکنون این کار را کرده اید مدیریت لایه هالایه های (مدیر لایه) باید مانند شکل 1 وجود داشته باشد. 6.


برنج. 6. نمای مدیر لایه

2. درج اشیاء از کتابخانه های مدل های آماده

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

سایت های زیادی وجود دارد که می توانید مدل های مشابه را دانلود کنید، به عنوان مثال:

  • http://www.3dklad.com/ و غیره

همچنین برخی از مدل های آماده را می توانید از قسمت "کتابخانه" این سایت دانلود کنید.

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

    ابتدا، هنگام جستجوی مدل ها، مطمئن شوید که متریال های مدل با رندری که در آن کار می کنید (VRay) مطابقت دارد.

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

تنها پس از آن می توانید با خیال راحت مدل را بدون ترس از بارگذاری بیش از حد در صحنه خود وارد کنید.

وظیفه 2

دانلود، بررسی و پیست ( import > ادغام) در صحنه ما از مدل های درختان، بوته ها، گل ها، سنگ ها، اتومبیل ها و موارد دیگر به صلاحدید شما (شکل 7).


برنج. 7. درج مدل های تمام شده

حتماً برای این اشیا لایه هایی ایجاد کنید و هر کدام را روی لایه خود قرار دهید (شکل 8).


برنج. 8. نمای مدیر لایه

3. چیدمان "دستی" اشیاء

برای تنظیم دقیق تر و دقیق تر صحنه، استفاده از روش دستی چیدمان اشیا بسیار راحت است. بنابراین، ما ساختمان‌ها، نیمکت‌ها، کوزه‌ها، علائم جاده‌ای، گل‌ها و سنگ‌ها را برای تخت گل‌ها، اتومبیل‌ها به معمول‌ترین روش ترتیب می‌دهیم - "دستی"، به سادگی با کشیدن آنها با ماوس با استفاده از ابزار را انتخاب کنید و حرکت دهید(انتخاب کنید و حرکت کنید). اشیاء گم شده با کپی کردن با فشار دادن کلید بدست می آیند تغییر مکان. نوع کپی را انتخاب کنید نمونه، مثال(نمونه) (شکل 9).


برنج. 9. کپی کردن اشیاء گم شده

در نتیجه باید صحنه ای مانند شکل 1 دریافت کنیم. 10، شکل. یازده


برنج. 10. نمای صحنه پس از قرار دادن "دستی" اشیا


برنج. 11. اشیاء مرتب شده

4. قرار دادن "خودکار" اشیا با استفاده از کنترلرها، انتقال به Proxy و ابزار Snapshot

اشیایی وجود دارند که باید با مقداری منظم چیده شوند، به عنوان مثال، فانوس ها، مشبک ها، بوته ها در الگوهای زیبایی "برش". بنابراین، ما روشی را در نظر خواهیم گرفت که به شما امکان می دهد فرآیند قرار دادن اشیاء را خودکار کنید.

1. یک شی، به عنوان مثال، یک فانوس را انتخاب کنید.

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

اجازه دهید شرایط لازم برای انتقال یک شی را به فرمول بندی کنیم شیء پروکسی.

    اگر شی از چندین جزء تشکیل شده باشد، باید با استفاده از دستور ترکیب شوند ضمیمه کنیدبه یک شی

    تمام بافت ها باید قبلاً روی شی اعمال شوند.

تنها پس از برآورده شدن این شرایط، شیء می تواند به آن منتقل شود پروکسی. برای انجام این کار، روی شی مورد نظر کلیک راست کرده و از منوی زمینه باز شده دستور را انتخاب کنید. صادرات مش وی ری(صادرات به سطح V-Ray) (شکل 12).


برنج. 12. انتقال یک شی به Proxy

در پنجره ای که باز می شود، در فیلد پوشه(پوشه) مسیر ذخیره شی Proxy را مشخص کنید (توصیه می شود یک پوشه برای اشیاء Proxy در پوشه پروژه ایجاد کنید تا هنگام کار روی پروژه خود در رایانه دیگری، اشیاء Proxy گم نشوند). در زمینه فایل(فایل) نامی برای شیء Proxy مشخص کنید یا پیش فرض را رها کنید. حتماً کادر را علامت بزنید ایجاد پراکسی به صورت خودکار(به صورت خودکار پروکسی ایجاد کنید) و کلیک کنید خوب(شکل 13).


برنج. 13. پارامترهای انتقال یک شی به یک پروکسی

جسم ظاهر خود را تغییر خواهد داد. این یکی دیگر از ویژگی های اشیاء پروکسی برای کاهش بار است. شی ممکن است شبیه یک جعبه، مانند یک شبکه فازی، یا حتی مانند یک نقطه و غیره باشد - بسته به گزینه های مشاهده انتخاب شده در پارامترهای شیء Proxy - اما پس از رندر، شکل واقعی خود را به خود می گیرد (شکل 14).


برنج. 14. نمایش ساده شی و تجسم آن

3. بررسی کنید که آیا دارید نقطه محوری(نقطه لنگر، نقطه محوری و مقیاس شی) در پایه جسم. حالا به صورت پیش فرض نقطه در وسط فانوس است. باید به پایه خود منتقل شود. برای انجام این کار، به تب بروید سلسله مراتب(سلسله مراتب) و انتخاب کنید فقط Pivot را تحت تأثیر قرار دهید(تأثیر در نقطه مرجع). حالا با کمک را انتخاب کنید و حرکت دهید(انتخاب و حرکت) و Snaps 3 می توانیم نقطه لنگر را حرکت دهیم (شکل 15). پس از آن، فراموش نکنید که از حالت ویرایش خارج شوید.


برنج. 15. نقطه محوری را حرکت دهید

4. بیایید یک مسیر را از قبل ایجاد کنیم، که در طول آن چراغ ها به طور مساوی قرار می گیرند. در مورد ما، ما به سادگی ایجاد می کنیم دایرهدر اطراف پارک، همانطور که در شکل. 16.


برنج. 16. ایجاد یک مسیر

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

فانوس را انتخاب کنید و به تب بروید حرکت - جنبش(حرکت - جنبش). بیایید طومار را باز کنیم کنترل کننده را تعیین کنید(تخصیص کنترلر)، برجسته کردن در هر خط موقعیت: PositionXYZ(موقعیت: موقعیت XYZ) و روی دکمه assign controller کلیک کنید. از لیستی که باز می شود، را انتخاب کنید لیست موقعیت(لیست کنترل کننده موقعیت). این کنترلر به شما امکان می دهد چندین کنترلر مستقل را به طور همزمان ترکیب کنید تا یک انیمیشن مشترک ایجاد کنید، این در آینده برای ما مفید خواهد بود.


برنج. 17. هدف از کنترل کننده لیست موقعیت

پس از اعمال این کنترلر در لیست ها Position: Position List > Position XYZ: Position XYZخط ظاهر خواهد شد در دسترس(در دسترس) که به شما امکان می دهد کنترلرهای جدیدی را به لیست اضافه کنید. این خط را انتخاب کنید و دوباره روی دکمه کلیک کنید. کنترل کننده را تعیین کنید. در کادر محاوره ای که باز می شود، این بار را انتخاب کنید محدودیت مسیر(محدودیت در طول مسیر). این کنترلر حرکت شی را در طول مسیر که همان spline مشخص شده است محدود می کند. این کنترلر برای متحرک سازی اشیاء در طول مسیرهای پیچیده (مثلاً حرکت ماشین در امتداد جاده) استفاده می شود. بیایید فشار دهیم خوب(شکل 18).


برنج. 18. تخصیص کنترل کننده محدودیت مسیر

حالا در یک اسکرول پایین بیایید لیست موقعیتجدا کردن محدودیت مسیرو دکمه را فشار دهید فعال را تنظیم کنید(فعال کنید). در یک طومار پارامترهای مسیر(پارامترهای مسیر) روی دکمه کلیک کنید اضافه کردن مسیر(Assign Path) و مسیر از پیش ایجاد شده را انتخاب کنید. حتماً کادر کناری را علامت بزنید دنبال کردن(دنبال کنید)، محور مورد نظر را انتخاب کنید، در صورت لزوم با انعکاس دهید تلنگر(انعکاس دهید). فانوس به ابتدای مسیر حرکت می کند (شکل 19).


برنج. 19. هدف از مسیر

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

از منوی اصلی ابزار(ابزار) یک ابزار را انتخاب کنید عکس فوری(نوع شی) (شکل 20). برای ایجاد آرایه ای از اشیاء در طول مسیر انیمیشن شی اصلی (در مورد ما، انیمیشن فانوس در طول مسیر) طراحی شده است.


برنج. 20. مکان ابزار Snapshot

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


برنج. 21. با استفاده از ابزار Snapshot

یک نکته مهم باقی مانده است. باید آن فانوس اصلی را با انیمیشن بردارید، در غیر این صورت در ویدیوی ارائه ما به صورت دایره ای حرکت می کند. انجام این کار بسیار آسان است: اکنون انتخاب شده است، بنابراین بدون حذف انتخاب، دکمه را فشار دهید حذفروی صفحه کلید

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


برنج. 22. نمای نهایی پس از قرار دادن چراغ ها

7. فانوس ها را در سراسر شهر بچینید. در جایی که استفاده از قرار دادن "اتوماتیک" چراغ ها خیلی راحت نیست - این کار را به صورت دستی انجام دهید (شکل 23).


برنج. 23. فانوس های چیده شده

وظیفه 3

شبکه های کوچکی را خودتان در اطراف پارک درست به همین ترتیب بچینید (شکل).

1. شبکه کوچک را انتخاب کرده و به آن ترجمه کنید شیء پروکسی.

2. حرکت کنید نقطه محوریدر پایه جسم (شکل 24).


برنج. 24. نقطه محوری در پایه جسم

3. یک مسیر برای قرار دادن شبکه ترسیم کنید - دایرهکمی بیشتر از قبل

4. به ترتیب کنترلرها را اختصاص دهید لیست موقعیتو محدودیت مسیر. کنترلر را فعال کنید محدودیت مسیربا کلیک بر روی دکمه فعال را تنظیم کنید. با کلیک بر روی دکمه یک مسیر از پیش ایجاد شده را تعیین کنید اضافه کردن مسیر. شبکه به ابتدای مسیر حرکت کرد و عمود بر آن ایستاد (شکل 25).


برنج. 25. مشبک واقع عمود بر مسیر

این باید با علامت زدن کادر کناری تصحیح شود دنبال کردن(دنبال کردن). در صورت نیاز به بازتاب با استفاده از آن، می توانید محور مورد نظر را انتخاب کنید تلنگر(تلنگر) (شکل 26).


برنج. 26. مشبک واقع در طول مسیر

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


برنج. 27. استفاده از ابزار Snapshot

با فشار دادن کلید، شبکه متحرک اصلی را حذف کنید حذفروی صفحه کلید

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


برنج. 28. نمای نهایی پس از قرار دادن شبکه های کوچک

وظیفه 4

خودتان میله های بزرگ در اطراف خانه ها و مدارس راه اندازی کنید. در جایی باید آنها را به صورت دستی مرتب کنید (مثلاً جایی که دروازه ها هستند)، در جایی می توان این فرآیند را خودکار کرد. نتیجه نهایی باید چیزی شبیه شکل. 29، شکل. سی


برنج. 29. نمای نهایی پس از قرار دادن گریتینگ های بزرگ


برنج. 30. نمای نهایی پس از قرار دادن گریتینگ های بزرگ

وظیفه 5

بوته ها را به طور خودکار در امتداد مسیرهای ترسیم شده قرار دهید (شکل 31، شکل 32).


برنج. 31. بوته های چیده شده


برنج. 32. بوته های چیده شده

5. چیدمان "خودکار" اشیا با استفاده از افزونه MultiScatter - MultiPainter

ما قبلاً چندین روش برای چیدمان اشیاء در صحنه در نظر گرفته ایم: "دستی" و "خودکار" در طول مسیر. اما اگر لازم باشد میلیون‌ها نسخه از یک شی، مانند چمن یا جنگل را مرتب کنیم، چه؟ روش هایی که قبلاً برای ما آشنا هستند در اینجا کمکی نمی کنند.

احتمالا قبلاً در مورد آن شنیده اید چند پراکنده. این یک افزونه برای 3Ds max است که با آن می توانید به راحتی و به راحتی صحنه هایی با میلیون ها شی ایجاد کنید. نسخه جدید MultiScatter شامل یک ماژول جدید و بسیار کاربردی است MultiPainter. این به شما امکان می دهد با استفاده از یک براش مجازی، اشیاء را روی یک سطح "نقاشی" کنید. ترسیم می تواند هم بر روی یک سطح و هم در چندین سطح به طور همزمان رخ دهد. می توانید همزمان با چندین شی مختلف نقاشی کنید. بنابراین، MultiPainter برای وظایف ما ایده آل است.

1. افزونه را دانلود و نصب کنید چند پراکنده.2. تافت های چمن را انتخاب کنید و آنها را ترجمه کنید اشیاء پروکسی (کلیک راست > صادرات مش VRay). در کادر محاوره ای که باز می شود، نام و پوشه را مشخص کنید، کادر را علامت بزنید ایجاد پراکسی به صورت خودکار. کلیک خوب.

3. آن را بررسی کنید نقطه محوریدر پایه تافت های چمن قرار داشت.

4. حالا می توانیم با استفاده از این اشیا مرتب کنیم MultiScatter - MultiPainter. برای انجام این کار، در برگه ایجاد کردنانتخاب کنید هندسهو از لیست کشویی انتخاب کنید چند پراکنده، دکمه را فشار دهید MultiPainter.

پس از آن، مطمئن شوید که نام آن را مستقیماً در صحنه قرار دهید - برای انجام این کار، دکمه سمت چپ ماوس را نگه دارید و مکان نما را به هر جهتی بکشید (شکل 33).


برنج. 33. تعیین MultiPainter

5. پس از آن، به تب بروید تغییر. در اینجا پارامترهای تازه نصب شده را می بینیم MultiPainter.

در یک طومار رنگ کردن اشیاء(Drawing Objects) در قسمت پراکنده کردن اشیاء(اشیاء برای قرارگیری) باید اشیایی را که با آنها ترسیم می کنیم را مشخص کنید. بیایید دکمه را فشار دهیم +قوریو اشیاء خود را در صحنه انتخاب کنید. دکمه + لیستبه شما امکان می دهد اشیاء را از لیست انتخاب کنید، نه از صحنه. اشیا را به روشی انتخاب کنید که مناسب شما باشد. دکمه -کتریوظیفه حذف اشیاء نقاشی را بر عهده دارد.

پس از تعیین اشیاء برای ترسیم، دو گزینه در دسترس خواهد بود - احتمال(احتمال، چگالی) و نرخ برخورد(مقدار برخورد). آنهایی هستند که باید راه اندازی شوند. در حال حاضر، بیایید مقدار پرتو سبز را تعیین کنیم احتمال 200، نرخ برخورد 5و برای پرتو زرد شده احتمال 10، نرخ برخورد 5.

در بخش گزینه های قلم مو(تنظیمات قلم مو) قابل تنظیم است شعاع(شعاع)، نرمی(نرم لبه) و شدت(شدت، نیروی فشار دادن) برس ها. بگذاریم شعاع 100, نرمی 1, شدت 80. در اینجا مهمترین دکمه ها وجود دارد رنگ کنید(قرعه کشی) و پاک کردن(پاک کردن).

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

در یک طومار چرخش(چرخش) می توانید تعیین کنید که اجسام در هنگام ترسیم چند درجه می توانند بچرخند. روی محور قرار دهید زمقدار چرخش 360 درجه برای اینکه تافت های چمن متفاوت به نظر برسند و تکرار نشوند.

در یک طومار مقیاس(مقیاس بندی) می توانید تعیین کنید که اشیا در مقیاس چقدر با یکدیگر تفاوت دارند. بیایید مقدار را تعیین کنیم از جانب(از جانب) 90 , به(قبل از) 100 .

در یک طومار پیش نمایش(پیش‌نمایش) می‌توانید حالت نمایش اشیاء را در پنجره دید انتخاب کنید. جعبه - هر شی به شکل یک جعبه خواهد بود، صلیب - به صورت ضربدر، Points، Count - به صورت مجموعه ای از نقاط، هیچکدام - به هیچ وجه در viewport نمایش داده نمی شود، که می تواند در یک صحنه سنگین بسیار مفید باشد.

تمام تنظیمات لازم در شکل نشان داده شده است. 34.


برنج. 34. تنظیمات MultiPainter

6. بنابراین، ما تمام پارامترها و تنظیمات مورد نیاز خود را نصب کرده ایم. حالا هر دو تیر را در قسمت انتخاب کنید پراکنده کردن اشیاءو دکمه را فشار دهید رنگ کنید(قرعه کشی). ما با قلم مو مستقیماً روی چمن خود رنگ می کنیم (شکل 35).


برنج. 35. نقاشی با قلم مو

میزان موفقیت پارامترهای تنظیم شده برای صحنه تنها پس از رندر اولیه قابل مشاهده است. بیایید با رندر کردن تصویر به نتیجه نگاه کنیم (شکل 36). در صورت لزوم، پارامترهای لازم را تغییر دهید.


برنج. 36. دسته های چمن چیده شده در صحنه

وظیفه 6

دسته های علف را در سراسر شهر بچینید، درختان را در شهر (شکل 37) و فراتر از آن (شکل 38) به همین ترتیب بچینید.


برنج. 37. در شهر چمن و درخت قرار داده شده است


برنج. 38. در خارج از شهر چمن و درخت قرار داده شده است

توجه داشته باشید:برای صرفه جویی در منابع رایانه، می توانید اشیاء را فقط در جایی که دوربین پرواز می کند قرار دهید.

جالب است!

و چندی پیش با مقاله ای جالب در مورد ساخت بازی های موبایلی با استفاده از Unity مواجه شدیم (تاریخ 12 آگوست 2015). با این حال، مزیت اصلی مقاله این است که این ابزار را با رقیب اصلی خود مقایسه می کند: Unreal Engine.

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

مقاله با اختصارات جزئی ترجمه شده است

ما (OnlineFussballManager GmbH) در حال حاضر شروع به توسعه یک پروژه جدید برای دستگاه های تلفن همراه کرده ایم. ما قصد داریم یک ترکیب هیجان انگیز و منحصر به فرد از استراتژی نوبتی و بازی مدیریت فوتبال ایجاد کنیم.

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

بنابراین، لحظه حقیقت فرا رسید که ما شروع به توسعه بازنمایی بصری کردیم.
با توجه به الزاماتی که پیش روی ما گذاشته شده و اینکه باید این بازی را هم برای iOS و هم برای اندروید توسعه دهیم - چگونه این پروژه را از نظر فنی پیاده سازی کنیم؟

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

البته در مورد اینکه کدام موتور بهتر است و برای چه اهدافی می توانید استدلال های زیادی ارائه دهید. چند نفر - نظرات بسیار. باید اعتراف کنیم که در مقطعی ما نیز چنین سوبژکتیویسمی را احساس کردیم. این تیم فعالانه از Unreal Engine پشتیبانی کرد. با این حال، مهم نیست که چقدر به UE نگاه می کنیم، هیچ کس نمی تواند آن را به طور عینی و بدون توسل به نظر شخصی توصیف کند.

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

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

به سمت مارمالاد برگشتیم. از این گذشته، با کمک Marmalade، بازی های معروفی مانند "Plants vs. زامبی ها و «گودوس». اما اگرچه مزایای زیادی در این موتور پیدا کردیم، اما مشکلاتی وجود داشت که ما را مجبور به روی آوردن به گزینه های دیگر کرد. یکی از بزرگترین معایب این بود که جامعه مارمالاد نسبتاً کوچک است.

بنابراین، از گزینه های اصلی، تنها Unreal و Unity باقی ماندند. اما حتی تا این مرحله، ما نمی‌توانستیم با اطمینان یکی از این دو را بدون کمک انتخاب کنیم.

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

ما با بچه های Epic در آنجا ملاقات کردیم، از نزدیک با Unreal Engine آشنا شدیم، Paper 2D، ابزار آنها برای مشاهده پیش نمایش برنامه های تلفن همراه را امتحان کردیم و پرسیدیم که از چه چیزی استفاده کنیم: موتور آنها یا Unity؟

بچه ها ما را تشویق کردند و چیزی شبیه به این گفتند: "Unreal جالب است، اما Unity هم بد نیست. هر دو را امتحان کنید."

سپس به سراغ توسعه دهندگان یونیتی رفتیم و Unity 5 را بررسی کردیم - چگونه عملکرد را در iOS بهبود می بخشد. در نهایت همان سوال را از آنها پرسیدند و پاسخی مشابه دریافت کردند.

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

از آنجایی که همه برنامه نویسان ما مشغول پروژه های فعلی بودند، ما کار بر روی نمونه اولیه را به متخصصان Bit Baron سپردیم.

تحقیق موتور توسط بیت بارون

«مدیر فوتبال آنلاین» (OFM) قصد داشت یک بازی موبایل ایجاد کند. از ما کمک خواسته شد تا با اطمینان بیشتری تصمیم بگیریم که کدام موتور برای پروژه آنها بهترین است. تا آن زمان، ما به طور انحصاری بازی های مرورگر را توسعه می دادیم، اما تصمیم گرفتیم که بتوانیم از عهده این کار برآییم. برای مقایسه دو گزینه پیشنهاد شد: Unity و Unreal. در حال حاضر، این دو "لوکوموتیو" در دنیای برنامه نویسی بازی هستند. گزارش های زیادی وجود دارد که تفاوت های جزئی بین این دو را به تفصیل نشان می دهد. اما ویژگی کار ما این بود که دو برنامه آزمایشی تقریباً یکسان را برای مقایسه نوشتیم و عملکرد آنها را مطابق با سیستم نقاط کنترل (محک گذاری) مشخص کردیم.

با نوشتن دو برنامه مشابه، ما توانستیم هر دو را در یک زمین بازی آزمایش کنیم، به OFM بگوییم کدام نسخه بهتر عمل می کند، و مسائل اضافی را برجسته کنیم.

مورد آزمایشی

ما می‌خواستیم معیاری ایجاد کنیم که اطلاعاتی را در اختیار OFM قرار دهد که مستقیماً مربوط به نوع بازی‌هایی است که می‌سازند. مشتریان نشان دادند که نمونه اولیه باید چندین ساختمان و درخت متحرک داشته باشد. بنابراین، ما یک صحنه سه بعدی ایجاد کردیم که در آن از کاربر خواسته شد که این اشیاء را به تنهایی روی نقشه قرار دهد. اندازه شبکه 11x16 بود و تا 176 ساختمان را شامل می شد. هر مربع شبکه تا 6 درخت را پشتیبانی می کند، بنابراین می تواند بیش از 1000 درخت در صحنه وجود داشته باشد. ما یک رابط کاربری ساده اضافه کردیم که در آن می توانید تعداد مشخصی از درختان و ساختمان ها را به صحنه اضافه کنید. ما همچنین عملکرد اضافه کردن ساختمان ها در مکان های خاص را اضافه کردیم - برای این کار باید روی نقشه در نقطه مورد نظر کلیک کنید. در مورد سازماندهی برنامه، ما یک شبکه در یک هواپیما ساختیم و صحنه را از طریق دوربینی که "بالای سر کاربر" قرار داشت مشاهده کردیم. ما همچنین عملکرد اختصاصی دوربین را اضافه کرده‌ایم تا کاربر بتواند صحنه را بزرگ‌نمایی و حرکت دهد. از آنجایی که این نمونه اولیه برای تصمیم گیری در مورد موتور توسعه ساخته شده است، ما تمام تلاش خود را کردیم تا صحنه تقریباً در هر دو نسخه یکسان به نظر برسد. در غیر این صورت، مقایسه کیفیت بصری گزینه اول و دوم غیرممکن خواهد بود. برای انجام این کار کمی کار لازم بود، زیرا برخی از چیزها در Unreal و Unity به طور متفاوتی مدیریت می شوند. در نتیجه، ما دو صحنه بسیار مشابه داشتیم.

برای یکسان سازی تست عملکرد، می خواستیم از مدل های درختی و ساختمانی یکسان در هر دو سیستم استفاده کنیم. برای درختان، ما از مدل SpeedTree موبایل استفاده کردیم که شامل فقط 1000 چند ضلعی بود و این امکان را فراهم می کرد که به خوبی ارزیابی کنیم که چگونه افزایش های کوچک در مثلث های نمایش داده شده بر نرخ فریم تأثیر می گذارد. در مورد ساختمان‌های متحرک، ما نتوانستیم مدلی برای آنها پیدا کنیم که با هر دو موتور کار کند، بنابراین از دو مدل مختلف استفاده کردیم. هر دو برای بیش از 16000 چند ضلعی طراحی شده بودند و تنظیمات مواد تقریباً یکسانی داشتند. سطوح جزئیات (LOD) را به طور کامل خاموش کردیم تا هر دو گزینه تعداد مثلث های یکسانی را در هر فاصله ای از دوربین نشان دهند. این آزمایش نه تنها برای منعکس کردن تفاوت عملکرد بین دو موتور، بلکه برای نشان دادن تفاوت در کیفیت رندر طراحی شده است. علاوه بر این، من مجبور شدم از نزدیک سایه زن های استاندارد Unreal Engine را زیر نظر بگیرم. با توجه به اینکه Unreal به طور مشخص بهتر به نظر می رسد، متوجه شدیم که تعدادی سایه زن در دوربین کار می کنند که از نظر عملکرد پرهزینه هستند. پس از خاموش کردن آنها، صحنه از نظر بصری تغییر چندانی نکرد. نورپردازی مشکل بسیار متفاوتی ایجاد کرد، بنابراین مدتی طول کشید تا آن را درست کنیم.

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

وحدت پروژه

نمونه اولیه در یونیتی. 200 درخت روی نقشه وجود دارد

خوب

  • عناصر اصلی Unity اشیا («GameObject») و مؤلفه‌ها («MonoBehaviour») هستند. پس از تسلط بر این مفهوم، آماده کار با Unity هستید. در صورت استفاده صحیح این سیستم می تواند سازماندهی پروژه را تا حد زیادی بهبود بخشد.
  • یونیتی دارای اجزای بسیاری است که همه چیزهایی را که برای ایجاد یک بازی نیاز دارید در اختیار شما قرار می دهد - به جز خود منطق بازی. همانطور که در بالا ذکر شد، مولفه می تواند به کوچکی Plane (نه در Unreal) باشد که برای ساخت مش استفاده کردیم. جدیدترین موارد اضافه شده به موتور، اجزای «UI» و «Layout» هستند که امکان ایجاد رابط های کاربری گرافیکی قدرتمند و مقیاس پذیر را فراهم می کند.
  • ویرایشگر را می توان با اسکریپت های خود گسترش داد، و منابع زیادی در فروشگاه دارایی برای همه موارد موجود است. فروشگاه دارایی همچنین حاوی اسکریپت‌های مفید، مدل‌های مواد و غیره است. آنها به‌ویژه هنگام نمونه‌سازی مفید خواهند بود - می‌توانید به سادگی هر چیزی را که نیاز دارید به عنوان منابع موقت دانلود کنید و از آنها به عنوان مدل‌های شبیه‌سازی مفید استفاده کنید.
  • یونیتی یکی از اولین موتورهای منبع باز بود که از توسعه موبایل پشتیبانی کرد. بنابراین، هنگام استقرار در یک محیط تلفن همراه بسیار راحت است، تقریباً به همان شکلی که در ویرایشگر وجود دارد، در آنجا به نظر می رسد و عمل می کند. سیستم به طور مداوم در حال بهبود است و استقرار بسیار روان پیش می رود. این عامل مهمی بود که باعث شد تصمیم بگیریم یک نمونه اولیه موبایل بسازیم.
  • Unity احتمالاً دارای بزرگترین جامعه متخصصان در میان موتورهای بازی است، بنابراین اگر سؤالی دارید، به احتمال زیاد پاسخی برای آن وجود خواهد داشت. اگرچه یونیتی از بسیاری از زبان‌های اسکریپت پشتیبانی می‌کند، مستندات هر کدام بسیار کامل است. علاوه بر این، حتی اگر پاسخی را به زبان دیگری بیابید، منطق آن پاسخ همچنان برای شما روشن خواهد بود و می توانید آن را برای حل مشکل خود تطبیق دهید.
  • یونیتی کار بسیار خوبی در بهینه سازی رندر برای بسیاری از اشیاء از یک نوع انجام داده است. برای دستیابی به عملکرد قابل مقایسه در Unreal، باید از Instanced Rendering استفاده کنید، و این مکانیسم معمولاً نسبت به رندر در Unity انعطاف‌پذیرتر است.

بد

  • کد منبع موتور بسته است. اگر در حال مذاکره با Unity برای قیمت کد منبع هستید، باید آن را تحمل کنید. بنابراین، در صورت عدم موفقیت یکی از ویژگی هایی که به آن تکیه می کنید، مشکلات ممکن است - باید منتظر بروزرسانی باشید.
  • سیستم رابط کاربری جدید بسیار خوب است. هیچ ویرایشگر خاصی در آن وجود ندارد، تمام تغییرات دقیقاً در صحنه انجام می شود - و صحنه بسیار بزرگ است. وقتی صحنه ای را باز می کنید و می خواهید رابط کاربری را ویرایش کنید، ابتدا باید روی منطقه مورد علاقه خود زوم کنید.

این یک عکس از ویرایشگر Unity است. ما بسیار خوش شانس هستیم که توانستیم آن را با فیلمنامه های خودمان تکمیل کنیم.

وحشتناک

  • سیستم UI جدید در Unity دو مشکل دارد. هنگامی که انگشت خود را روی صفحه لمسی فشار می دهید، نمی توانید تشخیص دهید که یک گرافیک خاص فشار داده شده است یا خیر. فرض کنید کاربر می خواهد صفحه را با استفاده از یک نوار لغزنده حرکت دهد. اما اگر کلاس GraphicsRaycaster را به ارث برده‌ایم، می‌توانیم هر داده دلخواه را که بتوان عمومی کرد، باز کرد. اگر GraphicsRaycaster را در شی canvas جایگزین کنید، می توانید بررسی کنید که آیا عنصر UI کلیک شده است یا خیر.
  • مشکل دوم در رابطه با رابط کاربری Unity مربوط به مقیاس بندی برای نمایشگرهای با اندازه های مختلف است. اساساً، شی بوم دارای گزینه های مقیاس بندی با برخی پارامترها است. اما سازماندهی پیش نمایش آنها بسیار دشوار بود، ما مجبور شدیم چندین بار برنامه را روی دستگاه اجرا کنیم تا زمانی که یک پیکربندی معمولی را انتخاب کنیم.
  • علاوه بر این، پنل آمار یونیتی بسیار گیج شده بودیم. پس از اجرای شمارشگر نرخ فریم درون بازی، مقدار آن را با آنچه در پنل آمار ویرایشگر Unity نمایش داده شده بود مقایسه کردیم. این مقادیر متفاوت است. پس از جستجو در اینترنت برای سایر پیاده سازی ها، پاسخ را یافتیم: پنل آمار تخمینی را ارائه می دهد که اگر بازی به صورت آفلاین کار کند و نه در ویرایشگر، چند فریم را هدر می دهد. بنابراین، منطق شمارنده فریم ما کاملاً درست بود.

مقادیر FPS 37 در مقابل 32 است. در پانل آمار Unity، داده های تخمینی یک برنامه مستقل را می بینیم که با برنامه های واقعی مطابقت ندارد.

پروژه غیر واقعی

در اینجا پروژه در ویرایشگر Unreal به نظر می رسد. بسیاری از ویرایشگرهای تودرتو تخصصی وجود دارد که برخی از آنها از نظر عملکرد با کل برنامه ها قابل مقایسه هستند.

همان اسکرین شات گرفته شده در UE مانند Unity (به بالا مراجعه کنید)، با تنظیمات تلفن همراه در حالت پیش فرض، بدون نور درخت

هنگامی که تنظیمات تنظیم شد، درختان بهتر ظاهر شدند، اما هنوز به خوبی در Unity نیستند

خوب

  • نسخه آزمایشی Unreal کاملا رایگان است. در آن یک ویرایشگر با امکانات کامل دریافت می کنید. Unity یک نسخه رایگان نیز دارد، اما ارتقاء به Pro هزینه گزافی دارد.
  • Unreal یک ویرایشگر قدرتمند دارد که شامل چندین ویرایشگر بسیار تخصصی است. اگر با این ویرایشگرهای "تودرتو" آشنا هستید، آنها در توسعه شما کمک زیادی به شما می کنند و اغلب اطلاعاتی را ارائه می دهند که در Unity نخواهید دید. ویرایشگرهایی وجود دارند که حتی می توانند به عنوان یک جایگزین کامل برای برخی از برنامه ها عمل کنند. تعامل همه این زیرسیستم ها به سادگی یک شاهکار است.
  • موتور با تمام کد منبع ارائه می شود. بنابراین، می‌توانید آن را بررسی کنید و نحوه عملکرد تک تک قطعات را درک کنید. علاوه بر این، حتی می توانید اشکالات موتور را برطرف کنید یا خودتان عملکرد آن را تکمیل کنید.
  • تجسم در ویرایشگر عالی است. فقط این است که چشم ها از فراوانی گزینه های رندر (مثلاً به پیچیدگی نور یا سایه زن) باز می شوند. در اینجا می توانید بسیاری از شیدرهای پیشرفته را پیدا کنید که همراه با موتور نیز ارائه می شوند. اساسا، Unreal بهترین موتور رندر موجود در بازار را ارائه می دهد. شما می توانید صحنه های شگفت انگیز زیبایی خلق کنید.
  • طرح‌های اولیه برای ایجاد سریع چیزی ساده و اجرای منطق اصلی بازی مفید هستند. آنها کاملاً با C++ ادغام می شوند و این تصمیم به طور تصادفی گرفته نشده است: نه تنها گسترده ترین امکانات را برای توسعه دهندگان مبتدی و با تجربه باز می کند، بلکه به آنها اجازه می دهد تا با یکدیگر تعامل داشته باشند.
  • ادغام کلی با C++ عالی است. مانند بارگذاری مجدد داغ.

Blueprint ها برای کارهای ساده عالی هستند، ادغام آنها با C++ فوق العاده است. اما اگر منطق پیچیده تری در میان باشد، آنگاه آنها به سرعت به یک آشفتگی تبدیل می شوند و مقابله با آنها دشوار می شود.

بد

  • هنگام توسعه بر روی Unreal Engine، افزایش سرعت آن دشوار است. حتی اگر زبان ++C را به خوبی بلد باشید، یادگیری ماکروها و توابع مختلف UE4 به زمان زیادی نیاز دارد. این ممکن است برای کسانی که همزمان در حال یادگیری ++C هستند بسیار دشوار باشد.
  • نقاشی ها می توانند خیلی سریع گیج شوند. وقتی منطق شامل ده‌ها گره است که هر کدام شامل یک طرح اولیه است، گاهی اوقات می‌توان آن را به چند خط کد که در C++ ساده نوشته شده است، ساده کرد. معمولاً این مشکلی نیست زیرا کار با ++C کاملاً امکان پذیر است، اما با برخی موارد مانند »UMG« (سیستم UI) باید از طرح های اولیه استفاده کنید و ممکن است گیج کننده باشد.
  • ثابت شد که شبیه ساز موبایل بسیار ناسازگار است. هنگامی که ما سعی کردیم از توابع سایه زن استفاده کنیم که در محیط موبایل استفاده نمی شود، هشدار می داد، اما حتی اگر سایه زن اعتبارسنجی را پشت سر بگذارد، ممکن است کار نکند. در اصل، این شبیه ساز چیز خوبی است، اما کیفیت بصری آن چیزهای زیادی را برای شما باقی می گذارد.
  • در حالی که Unreal جامعه توسعه دهندگان بزرگی دارد، ما به ندرت پاسخ سوالات را در آنجا دریافت می کنیم. علاوه بر این، تقریباً تمام پشتیبانی هایی که از ما انجام شد مربوط به نقشه ها بود. Unreal Engine 4 به طور فعال جامعه را رشد می دهد، در حال حاضر به خوبی کار می کند، به نظر می رسد که متخصصان مشتاق توسعه و کمک هستند. اما جامعه یونیتی هنوز بهتر است.

وحشتناک

  • کمبود جدی اسناد ++C وجود دارد. مواد مرجع آنلاین برای کلاس های C++ ناخوشایند است. علاوه بر این، به دلیل به روز رسانی های مداوم، بسیاری از ویژگی ها به سرعت منسوخ می شوند. هنگام تماشای ویدیوهای راهنما مراقب باشید، زیرا ممکن است نسخه قدیمی موتور و ویژگی هایی را توصیف کنند که دیگر استفاده نمی شوند.
  • با کار با رابط کاربری گرافیکی، از سیستم نوآورانه »UMG« استفاده کردیم. این بر اساس نقشه ها است و می تواند بسیار مفید باشد. با کمی کار، توانستیم کلاس C++ را به ارث ببریم و نقشه ها را کمی تمیز کنیم. با این حال، سیستم همچنان خام است و برخی از کنترل‌ها مانند دکمه‌های جابجایی را ندارد. علاوه بر این، اسناد C++ مرتبط کمی وجود دارد. هنگامی که ما در حال توسعه UI بودیم، ویرایشگر چندین بار از کار افتاد. خرابی‌های غیرمنتظره می‌توانند ساعت‌های کامل زمان کار را به همراه داشته باشند، آنها بسیار آزاردهنده هستند. توسعه این سیستم در حال انجام است، اما تا کنون بسیار دور از کامل است.
  • توسعه موبایل با Unreal کند است. این برنامه زمان زیادی طول می کشد تا در دستگاه مستقر شود. برخی از مشکلات بصری در اندروید وجود داشت، مانند خطوط تار و درختان بدون نور. در iOS، مشکلات بسیار جدی تر بود. UE4 فقط در صورتی از ساختن برای یک دستگاه iOS پشتیبانی می کند که برنامه شما فقط از طرح های اولیه تشکیل شده باشد. تقصیر اپل است، اما ما تمام راه را برای وارد کردن کلیدهای توسعه (شما می توانید تصور کنید) را پیش از این که با این مشکل مواجه شویم رفتیم. در iOS، بافت درختان ساخته شده بر اساس SpeedTree نمایش داده نمی شد، درختان خاکستری و لخت و بدون برگ بودند. بنابراین، پشتیبانی از توسعه موبایل در یونیتی در مقایسه با Unreal برنده قابل توجهی است.

نتایج محک. نرخ فریم

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

نتایج برای هر دو موتور بسیار بهتر از آن چیزی بود که انتظار داشتیم (همانطور که به یاد دارید، مدل های آزمایشی ما حدود 10 برابر بیشتر از بازی های معمولی تلفن همراه دارای مثلث بودند).

در iOS، هر دو موتور مدل های متحرک را تقریباً با موفقیت یکسان ارائه کردند. با این حال، آزمایش‌ها با درختان روی این دستگاه بی‌نتیجه بود، زیرا Unreal هیچ بافتی را در مدل‌های درختی نشان نداد. ما سعی کردیم دلیل این الگو را پیدا کنیم، اما نتوانستیم آن را حل کنیم. علاوه بر این، باید توجه داشته باشیم که هنگام استقرار با استفاده از این موتورها، باید یک رایانه اپل در دسترس داشته باشید. این بسیار ناخوشایند است، اما خود اپل در این وضعیت مقصر است. مشتریان همچنین از ما خواسته اند که تست بنچمارک را روی ویندوزفون انجام دهیم. متأسفانه، Unreal هنوز از استقرار در تلفن‌های ویندوز پشتیبانی نمی‌کند، بنابراین Unity در اینجا برنده می‌شود. از آنجایی که Windows Phone در حال حاضر سهم بسیار کمی از بازار را به خود اختصاص داده است، توسعه Unreal در این جهت اولویت در نظر گرفته نمی شود.

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

سایر پارامترهای کنترلی

در اینجا نتایج جالب دیگری وجود دارد که ما در طی آزمایشات خود به آنها پی بردیم:

  • هر دو موتور تقریباً در مصرف حافظه تفاوتی نداشتند. در دستگاه های Android، Unity کمی برنده شد، در دستگاه های iOS - Unreal.
  • پروژه Unity به طور قابل توجهی کوچکتر است (اندروید: 42 مگابایت / iOS: 100 مگابایت) از Unreal (اندروید: 101 مگابایت / iOS: 173 مگابایت).
  • یونیتی تقریباً سه برابر سریعتر برای استقرار در یک دستگاه است. علاوه بر این، Unity کد را بسیار سریعتر کامپایل می کند.
  • Unreal از نظر عمر باتری بسیار مقرون به صرفه تر بود. پس از دو ساعت کار با 150 مدل متحرک روی صفحه، Unreal موفق شد باتری اندروید را 42 درصد و iOS را 36 درصد خالی کند. یونیتی تقریباً 72 درصد در اندروید و 47 درصد در iOS برای زمان راه‌اندازی و اجرای یکسان مصرف کرد.

نتیجه گیری

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

علیرغم این واقعیت که در ابتدا ما روی Unreal Engine شرط بندی کردیم تا برنده شویم، Unity در حال حاضر گزینه برنده تر است، حداقل در مورد توسعه بازی های موبایل.

در اینجا دلایل اصلی تصمیم ما آمده است:

  • یونیتی از نظر بصری در همه دستگاه‌ها سازگارتر به نظر می‌رسد و با یک کلیک روی هر پلتفرمی به سرعت مستقر می‌شود.
  • یونیتی فضای بسیار کمتری را در دستگاه اشغال می کند و تأثیر کمتری بر تجربه کاربر نهایی دارد. اندازه جمع و جور به ویژه در فروشگاه Google Play مهم است، جایی که اگر این فایل بزرگتر از 50 مگابایت باشد، APK باید به قطعات تقسیم شود.
  • یادگیری و درک وحدت بسیار آسان تر است. با استفاده از Unity، کاربر بی تجربه می تواند سریعتر راه اندازی شود و محصولاتی بسازد که توسط جامعه بزرگی از متخصصان پشتیبانی می شود.
  • زمان تکرار در یونیتی بسیار کوتاهتر است (استقرار و کامپایل کد منبع سریعتر است، شیدرها تقریباً بلافاصله کامپایل می شوند)

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

نتیجه

جالب است بدانید که بچه های Bit Barons به ما توصیه کردند قبل از ایجاد نمونه اولیه، Unreal Engine را برای پروژه خود استفاده کنیم. با توجه به اینکه ما در OFM در ابتدا Unreal Engine را ترجیح می‌دادیم، شاید راه‌حل نهایی غیربهینه باشد.

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

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

در مورد پرسنل، ما با استخدام کنندگان مجرب مشورت کردیم تا اعداد کم و بیش واقعی را دریابیم. در حال حاضر تقریباً چهار متخصص Unity برای هر متخصص Unreal وجود دارد. در مورد مدل کسب و کار، Unreal کارمزد ثابت اولیه را ارائه نمی دهد، اما به حق امتیاز نیاز دارد. در یونیتی همه چیز دقیقا برعکس است. هر دوی این عوامل برای ما مهم بود و در نتیجه همچنان به یونیتی بسنده کردیم.

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


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

آموزش. ایجاد خود ساختمان ها، مدل های ساختمان. نحوه متحرک شدن آنها و غیره - مهم نیست، مدل اصلی باید زیر برخورد دهنده باشد، این نه تنها برای ساخت و ساز، بلکه برای ایجاد یک نقشه ناوبری برای ربات ها نیز ضروری است. مثلا:

برخورد دهنده باید کل جسم را بپوشاند.

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


به همین ترتیب، جسم باید توسط برخورد دهنده بسته شود، اما در حالت ماشه است. در این مورد، برخورد دهنده طرح را می توان کمی بزرگتر از اصلی، به عنوان مثال 0.1+ کرد، این حساسیت را افزایش می دهد و اطمینان حاصل می کند که ایجاد یک شی روی دیگری غیرممکن است. همه طرح‌بندی‌ها باید دارای مجموعه لایه‌های Ignore Raycast باشند!علاوه بر این، ما به مدل آویزان می شویم بدن سفت و سختو جاذبه را خاموش کنید. به علاوه، ما یک فیلمنامه کوچک آویزان می کنیم MaskControl:

با استفاده از UnityEngine؛ با استفاده از System.Collections. کلاس عمومی MaskControl: MonoBehaviour (رشته عمومی respawnTag = "Respawn"؛ void Start() (DragAndDrop.isOn = true؛ ) void OnTriggerStay(Collider coll) (if(coll.tag != respawnTag) (DragAndDropse;isOn) = ) void OnTriggerExit(Collider coll) ( if(coll.tag != respawnTag) ( DragAndDrop.isOn = true; ) )
وظیفه این اسکریپت این است که تعیین کند شیء را در کجا می توان نصب کرد و در کجا نه. در یک متغیر respawnTagما برچسبی را مشخص می کنیم که امکان نصب را فراهم می کند. فرض کنید اگر یک هواپیما با برچسب بسازید، آنگاه ساختمان فقط در این منطقه ساخته می شود و اگر جسم به ساختمان های دیگر برخورد کند، به طور خودکار مسدود می شود. به طور کلی، همه چیز مانند یک استراتژی معمولی است.

بعد، نام ساختمان ها. پیش ساخته های اصلی ساختمان به این صورت نامگذاری شده اند id_xxx، یعنی - شماره، زیرخط، نام. پیش ساخته های چیدمان دقیقاً به همین نام نامگذاری می شوند. اعداد اصلی و طرح - باید مطابقت داشته باشند، و نام ها ممکن است متفاوت باشد.

حالا یک اسکریپت را روی یک شی خالی آویزان می کنیم کشیدن و رها کردن:

با استفاده از UnityEngine؛ با استفاده از System.Collections. با استفاده از سیستم؛ کلاس عمومی DragAndDrop: MonoBehaviour (تبدیل عمومی اصلی؛ ماسک تبدیل عمومی؛ تغییر شناور عمومی = 0.01f؛ رشته عمومی respawnTag = "Respawn"؛ bool استاتیک عمومی isOn؛ تبدیل خصوصی original_tmp؛ تبدیل خصوصی mask_tmp؛ خصوصی Vector3 curPos؛ void Start() ( isOn = false; ) public void SetMask(int id) ( foreach(Transform obj in original) ( string name = obj.name.Split(new char ("_"), StringSplitOptions.RemoveEmptyEntries)؛ if(id.ToString( ) == نام) ( original_tmp = Instantiate(obj)؛ original_tmp.gameObject.SetActive(false); ) ) foreach(تبدیل obj در ماسک) ( نام رشته = obj.name.Split(نویسه جدید ("_")، StringSplitOptions .RemoveEmptyEntries)؛ if(id.ToString() == نام) ( mask_tmp = Instantiate(obj); ) ) ) void Update() ( RaycastHit hit؛ Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition)؛ if ( Physics.Raycast(ray, out hit)) (curPos = hit.point + hit.normal * shift; ) if(mask_tmp) ( mask_tmp.position = curPos; if (Input.GetAxis("Mouse ScrollWheel") > 0) ( mask_tmp.localEulerAngles += new Vector3(0, 45, 0); ) if(Input.GetAxis("چرخ پیمایش ماوس")< 0) { mask_tmp.localEulerAngles -= new Vector3(0, 45, 0); } if(Input.GetMouseButtonDown(0) && isOn) { original_tmp.gameObject.SetActive(true); original_tmp.position = mask_tmp.position; original_tmp.localEulerAngles = mask_tmp.localEulerAngles; original_tmp = null; isOn = false; Destroy(mask_tmp.gameObject); } else if(Input.GetMouseButtonDown(1)) { Destroy(original_tmp.gameObject); Destroy(mask_tmp.gameObject); } } } }
اصلی- مجموعه ای از تمام پیش ساخته ها با مدل های اصلی ساختمان.

ماسک- آرایه ای از تمام پیش ساخته های چیدمان.

تغییر مکان- تغییر محور Yبرای مدل

respawnTag- برچسب هواپیمایی که ساخت و ساز در آن مجاز است.

باید تعدادی را به صحنه اضافه کنیم. UIعناصر، دقیقاً نمادها، GameObject > UI > Image. تعداد مورد نیاز آیکون را ایجاد می کنیم، آنها را در صورت نیاز قرار می دهیم. سپس، روی هر نماد، باید یک جزء اضافه کنید ماشه رویداد، عملکرد را انتخاب کنید اشاره گر کلیک کنیدو سپس شیء را با اسکریپت DragAndDrop به قسمت فعال بکشید و تابع اسکریپت را از منو انتخاب کنید - ست ماسکو شماره طرح را مشخص کنید. مثلا:


یعنی نتیجه این است که هر نماد مربوط به یک مدل خاص است، بنابراین ما اعداد را اختصاص می دهیم. در بازی، روی نماد کلیک کنید - شماره را به اسکریپت ارسال کنید - مدل مربوطه را پیدا می کند. اینطوری کار می کند.

LMB روی نماد - طرح ساختمان را دریافت کنید. LMB مکرر - ساختمان را تنظیم کنید. RMB - لغو. چرخ ماوس - چرخش.

برترین مقالات مرتبط