آشنایی با Blueprint در آنریل انجین ۵
فهرست مطالب
با دیگر مقالات فنی – تخصصی ماناتاز همراه شما هستیم و اینبار قصد ورود به عمق موتور بازی سازی آنریل انجین را داریم.
ما در مقالات پی در پی در رابطه با قدرت فوق العاده ی این موتور قدرتمند صحبت کرده ایم و آنریل را می توان یک موتور بدون محدودیت در زمینه ی بازی سازی تا حتی انیمیشن سازی و معماری دانست.
در اینجا ما قصد ورود به بخش برنامه نویسی سمت این انجین را داریم و می خواهیم blueprint را به شما معرفی کنیم.
همچنین برای درک و آشنایی کامل تر با blueprint ما از آن در قالب پروژه نیز استفاده خواهیم کرد.
در این آموزش پس از آشنایی با بلو پرینت در آنریل انجین ، یاد خواهید گرفت که چگونه از Blueprints برای ایجاد یک کارکتر پلیر ، تنظیم ورودی ها و ناپدید شدن یک آیتم با لمس آن استفاده کنید.
blueprint چیست
از نسخه 4 ، ادیتور Unreal Engine به سیستم اسکریپت بصری Blueprints علاوه بر پشتیبانی سنتی از ++C مجهز شده است.
هدف اصلی این سیستم ارائه یک رابط برنامهنویسی کاربر پسندانه و در عین حال ساده تر از C++ است ، که امکان ایجاد سریع نمونههای اولیه را فراهم میکند یا حتی به طراحان اجازه میدهد رفتار عناصر بازی را طراحی کنند.
ویژگی اصلی سیستم برنامه نویسی Blueprint توانایی ایجاد کد با ایجاد باکس هایی است که نشان دهنده توابع برای ایجاد رفتار و تعریف نحوه عملکرد منطق بازی است.
در این آموزش ، شما از Blueprints برای موارد زیر استفاده خواهید کرد :
- تنظیم دوربین
- ایجاد یک کارکتر
- تنظیم ورودی ها
- ایجاد یک عملکرد برای کارکتر
توجه : این آموزش فرض میکند که شما نحوه ی استفاده از رابط کاربری Unreal Engine 5 را می دانید.
اگر با مفاهیم اولیه Blueprint مانند کامپوننت ها ، گره ها و برداردها (vectors) آشنا باشید، این آموزش برای شما بسیار راحت خواهد بود.
شروع کار
با کلیک بر روی دکمه Download Materials ، پروژه را دانلود کنید و آن را از حالت فشرده خارج کنید.
برای باز کردن پروژه ، به پوشه starter project بروید و BananaCollector.uproject را باز کنید.
صحنه زیر را خواهید دید.
این جایی است که پلیر به اطراف حرکت می کند و آیتم ها را جمع آوری می کند.
فایل های پروژه را در پوشه ها سازماندهی شده پیدا خواهید کرد :
All/Content/BananaCollector/Blueprints : شامل طرح های اولیه آموزش است.
All/Content/BananaCollector/Maps : شامل level پروژه است.
All/Content/BananaCollector/Materials : شامل شیدرهای بازی است.
All/Content/BananaCollector/Meshes : حاوی فایل های مش تمامی آبجکت های بازی پروژه است.
All/Content/BananaCollector/Textures : شامل تکسچر های آبجکت های بازی پروژه است.
برای ثابت نگه داشتن Content Drawer در پنجره ادیتور از دکمه ای که در بالا با رنگ قرمز مشخص شده است استفاده کنید.
اگر دکمه ظاهر نشد ، Content Drawer قبلاً ثابت شده است.
ساخت پلیر
در Content Drawer ، به پوشه Blueprints بروید.
روی دکمه Add کلیک کنید و Blueprint Class را انتخاب کنید.
اکتر (actor) باید بتواند ورودی ها را از پلیر دریافت کند ، بنابراین کلاس Pawn را از پنجره پاپ آپ انتخاب کنید و نام آن را BP_Player بگذارید.
توجه : کلاس Character نیز کار خواهد کرد. حتی به طور پیش فرض شامل یک کامپوننت حرکتی نیز می شود.
با این حال ، شما سیستم حرکتی خود را پیاده سازی خواهید کرد ، بنابراین کلاس Pawn کافی است.
برای آشنایی بیشتر با تفاوت های Character و Pawn ، این مقاله اپیک گیمز را بخوانید.
وصل کردن دوربین
دوربین متد بازیکن برای نگاه کردن به جهان است.
دوربینی ایجاد خواهید کرد که از سمت پایین به پلیر نگاه می کند.
در Content Drawer، روی BP_Player دوبار کلیک کنید تا در ادیتور Blueprint باز شود.
برای ایجاد دوربین ، به پنل Components بروید.
روی Add Component کلیک کنید و Camera را انتخاب کنید.
برای اینکه دوربین در نمای بالا به پایین باشد ، باید آن را بالای پلیر قرار دهید.
با انتخاب کامپوننت دوربین ، به تب Viewport بروید.
move manipulator (حرکت دهنده) را با فشار دادن کلید W فعال کنید و سپس آن را به (-1100، 0، 2000) ببرید.
همچنین، مختصات را در فیلدهای Location تایپ کنید.
آنها در قسمت Transform در پنل Details قرار دارند.
اگر دوربین کنترل دوربین را ندارید ، کلید F را فشار دهید تا روی آن فوکوس کنید.
سپس با فشار دادن کلید E می توانید rotation manipulator را فعال کنید.
دوربین را روی محور Y تا 60- درجه به پایین بچرخانید.
مشخصات نهایی دوربین باید مطابق شکل زیر باشد.
تنظیم پلیر
یک مکعب قرمز نشان دهنده پلیر است ، بنابراین باید از یک کامپوننت Static Mesh برای نمایش آن استفاده کنید.
ابتدا با کلیک چپ روی یک فضای خالی در پنل Components، کامپوننت دوربین را از حالت انتخاب خارج کنید.
اگر این کار را انجام ندهید ، کامپوننت بعدی اضافه شده فرزندی از کامپوننت دوربین خواهد بود.
روی Add کلیک کنید و Static Mesh را انتخاب کنید.
برای نمایش مکعب قرمز ، کامپوننت Static Mesh را انتخاب کرده و سپس به تب Details بروید.
روی منوی کشویی واقع در سمت راست Static Mesh کلیک کنید و SM_Cube را انتخاب کنید.
این همان چیزی است که باید ببینید (F را در داخل Viewport تایپ کنید تا اگر آن را نمی بینید روی آن بروید):
اکنون زمان آن رسیده است که player Pawn را تولید کنیم.
روی Compile کلیک کنید و به ادیتور اصلی بازگردید.
پیاده سازی پلیر
قبل از اینکه پلیر بتواند Pawn را کنترل کند ، باید دو چیز را مشخص کنید :
- کلاس Pawn که بازیکن کنترل خواهد کرد
- جایی که Pawn زیاد می شود
اولین مورد را با ایجاد یک کلاس Game Mode جدید انجام می دهید.
ساخت یک Game Mode
A Game Mode کلاسی است که نحوه ورود بازیکن به بازی را کنترل می کند.
به عنوان مثال ، در یک بازی چند نفره ، از Game Mode برای تعیین محل هر player spawns استفاده می کنید.
مهمتر از آن ، Game Mode تعیین می کند که بازیکن از کدام Pawn استفاده کند.
به Content Drawer بروید و مطمئن شوید که در پوشه Blueprints هستید.
روی دکمه Add New کلیک کنید و Blueprint Class را انتخاب کنید.
از پنجره باز شده ، Game Mode Base را انتخاب کنید و نام آن را GM_Tutorial بگذارید.
حال باید مشخص کنید که کدام کلاس Pawn پیش فرض خواهد بود.
روی GM_Tutorial دوبار کلیک کنید تا باز شود.
به پنل Details بروید و زیر قسمت Classes را ببینید.
روی منوی بازشوی Default Pawn Class کلیک کنید و BP_Player را انتخاب کنید.
روی Compile کلیک کنید و ادیتور Blueprint را ببندید.
قبل از استفاده از Game Mode جدید خود ، level باید بداند از کدام Game Mode استفاده کند.
این بخش را در World Settings مشخص کنید.
World Settings
هر لول تنظیمات خود را دارد.
با انتخاب منوی Window ▸ World Settings به تنظیمات دسترسی پیدا کنید.
یا به toolbar رفته و Settings ▸ World Settings را انتخاب کنید.
یک برگه World Settings جدید در کنار برگه Details باز می شود.
از اینجا، روی منوی کشویی GameMode Override کلیک کنید و GM_Tutorial را انتخاب کنید.
اکنون خواهید دید که کلاس ها به کلاس های انتخاب شده در GM_Tutorial تغییر کرده اند.
در نهایت، باید مشخص کنید که بازیکن در کجا spawn می کند.
این کار را با قرار دادن Player Start actor در level انجام می دهید.
قرار دادن Player Start
هنگام spawning یک بازیکن ، Game Mode به دنبال یک Player Start actor می گردد.
اگر Game Mode یکی را پیدا کن د، سعی میکند پلیر را در آنجا spawn کند.
برای قرار دادن Player Start، به Toolbar بروید، روی دکمه Add New کلیک کنید و به Basic ▸ Player Start بروید.
کلیک چپ کرده و Player Start را از پنل Modes به Viewport بکشید.
با رها کردن کلیک چپ آن را قرار میدهیم.
این را هر کجا که دوست دارید قرار دهید.
وقتی کارتان تمام شد ، به Toolbar بروید و روی Play کلیک کنید.
شما در جایی که Player Start را قرار داده اید spawn خواهید کرد.
برای خروج از بازی ، روی دکمه Stop در Toolbar کلیک کنید یا کلید Esc را فشار دهید.
اگر cursor خود را نمی بینید، Shift+F1 را فشار دهید.
اگر نتوانید در اطراف حرکت کنید، بازی چندان جالبی نیست، درست است ؟
پس بخش بعدی کار ما تنظیم تنظیمات ورودی است.
تنظیم ورودی ها
قبل از تنظیم ورودی های پلیر ، خوب است کمی در مورد key bindings و نحوه استفاده از آنها برای ایجاد ورودی پلیر به صورت انعطاف پذیر و کامل ، بدانید.
در Unreal ، میتوانید key bindings را تنظیم کنید که با فشار دادن آنها ، رویدادی را راهاندازی کنند.
رویدادها گرههایی هستند که زمانی اجرا میشوند که اعمال خاصی اتفاق میافتد (در این مورد، زمانی که bound key را فشار میدهید).
هنگامی که رویداد راه اندازی می شود ، هر گره متصل به رویداد اجرا می شود.
این روش binding keys مفید است زیرا به این معنی است که شما نیازی به کدهای سخت ندارید.
به عنوان مثال ، شما کلیک چپ را متصل کرده و نام آن را Shoot می گذارید.
هر اکتری که بتواند تیراندازی کند میتواند از رویداد Shoot استفاده کند تا بداند بازیکن چه زمانی کلیک چپ را فشار داده است.
اگر می خواهید کلید را تغییر دهید ، آن را در تنظیمات ورودی تغییر دهید.
اگر آن را hard-coded کرده بودید، باید در هر اکتر جست و جو کنید و کلیدها را جداگانه تغییر دهید.
Axis Value و Input Scale
در Unreal ، ورودی از طریق axis values تعیین شده در project settings خوانده می شود.
axis values یک مقدار عددی است که با نوع ورودی و نحوه استفاده از آن تعیین می شود.
دکمه ها و کلیدها با فشار دادن 1 خروجی می دهند.
Thumbsticksبسته به جهت و میزان فشار دادن، مقداری بین -1 و 1 تولید میکنند.
از axis value برای کنترل سرعت pawn استفاده کنید.
به عنوان مثال ، اگر انگشت شست را به لبه فشار دهید ، مقدار محور 1 خواهد بود.
اگر آن را تا نیمه فشار دهید، 0.5 می شود.
با ضرب axis value با یک متغیر سرعت، سرعت را با thumbstick تنظیم کنید.
همچنین می توانید از axis value برای تعیین جهت در امتداد یک محور استفاده کنید.
اگر Pawn’s speed را در یک axis value مثبت ضرب کنید ، یک افست مثبت دریافت می کنید.
استفاده از یک axis value منفی منجر به negative axis می شود.
افزودن این افست به Pawn’s location ، جهت آن را تعیین می کند.
از آنجایی که کلیدهای صفحه کلید فقط می توانند مقدار محور 1 یا 0 را تولید کنند ، می توانید از scale برای تبدیل آن به منفی استفاده کنید.
با گرفتن axis value و ضرب آن در scale کار می کند.
اگر یک مثبت (axis value) را در یک منفی (scale) ضرب کنید، یک منفی می گیرید.
Axis و Action Mappings
برای مشاهده تنظیمات ورودی ، به Edit ▸ Project Settings بروید.
یر روی دکمه تنظیمات در سمت چپ بالای پنجره ادیتور کلیک کنید.
در سمت چپ، Input را در قسمت Engine انتخاب کنید.
بخش Bindings به شما امکان می دهد ورودی های خود را تنظیم کنید.
Unreal دو روش برای ایجاد key bindings ارائه می دهد :
Action Mapping : این ها فقط می توانند در دو حالت باشند : pressed یا not pressed.
Action events تنها زمانی فعال می شوند که کلید را فشار داده یا رها کنید.
از این برای اکشن هایی استفاده کنید که حالت میانی ندارند ، مانند شلیک اسلحه.
Axis Mapping : اینها یک مقدار عددی به نام axis value خروجی می دهند.
Axis events هر فریم را فعال میکنند.
شما معمولاً از این برای اقداماتی که نیاز به انگشت شست یا ماوس دارند استفاده می کنید.
در این آموزش، از axis mappings استفاده خواهید کرد.
ساخت Movement Mappings
ابتدا دو axis mapping groups ایجاد خواهید کرد.
گروه ها به شما امکان می دهند چندین کلید را به یک رویداد متصل کنید.
برای ایجاد یک axis mapping group جدید ، روی علامت + در سمت راست Axis Mappings کلیک کنید.
دو گروه ایجاد کنید و نام آنها را MoveForward و MoveRight بگذارید.
MoveForward حرکت به جلو و عقب را انجام می دهد.
MoveRight حرکت به چپ و راست را کنترل می کند.
حرکت را به چهار کلید تخصیص دهید : W، A، S و D.
در حال حاضر ، تنها دو اسلات برای نقشهبرداری از کلیدها وجود دارد.
با کلیک بر روی علامت + در کنار فیلد group name ، می توانید axis mapping دیگری را به هر گروه اضافه کنید.
برای ترسیم یک کلید ، روی منوی کشویی کلیک کنید تا فهرستی از کلیدها ظاهر شود.
کلیدهای W و S را روی MoveForward قرار دهید.
کلیدهای A و D را به MoveRight تنظیم کنید.
scale کلیدهای S و A را با کلیک بر روی قسمت Scale و وارد کردن -1 تنظیم کنید.
حال قسمت جذاب کار به میان می آید : ایجاد حرکت Pawn.
تنظیمات پروژه را ببندید و سپس BP_Player را در ادیتور Blueprints با دوبار کلیک کردن روی آن باز کنید.
حرکت پلیر
ابتدا باید رویدادهای مربوط به movement mappings خود را دریافت کنید.
در BP_Player blueprint ، روی تب Event Graph در بالای پنجره کلیک کنید.
روی یک فضای خالی در Event Graph کلیک راست کنید تا لیستی از گره ها نمایش داده شود.
از منو، عبارت MoveForward را جستجو کنید.
گره MoveForward را که در زیر Axis Events فهرست شده است اضافه کنید.
این روند را برای MoveRight تکرار کنید.
اکنون، گرهها را برای MoveForward تنظیم میکنید.
استفاده از متغیرها
برای حرکت باید سرعت حرکت Pawn را مشخص کنید.
یک راه آسان برای تعیین سرعت، ذخیره آن در یک متغیر است.
برای ایجاد یک متغیر ، به تب My Blueprint بروید و بر روی علامت + در سمت راست بخش Variables کلیک کنید.
پس از ایجاد متغیر جدید ، Unreal به شما اجازه می دهد تا نامی برای آن انتخاب کنید.
آن را روی MaxSpeed تنظیم کنید.
سپس در تب Details نوع متغیر را به Float تغییر دهید.
این کار را با کلیک کردن روی منوی کشویی کنار Variable Type و انتخاب Float انجام دهید.
بعد، باید مقدار پیش فرض را تنظیم کنید.
با این حال، قبل از تنظیم آن ، باید روی Compile در Toolbar کلیک کنید تا نوع فیلد مقدار پیشفرض با نوع متغیر Float جدید انتخاب شده ، همگام شود.
در حالی که متغیر شما در حالت انتخاب است ، به تب Details بازگردید.
به قسمت Default Value رفته و مقدار پیش فرض MaxSpeed را به 10 تغییر دهید.
سپس متغیر MaxSpeed از تب My Blueprint را به گراف Event بکشید.
از منو گزینه Get را انتخاب کنید.
اکنون MaxSpeed و axis value را برای تعیین سرعت و جهت نهایی ضرب میکنید.
یک گره شناور * float اضافه کنید و Axis Value و MaxSpeed را به آن متصل کنید.
دریافت Player Direction
برای حرکت رو به جلو ، باید بدانید که محل حرکت رو به کجاست.
خوشبختانه Unreal یک گره برای این منظور دارد.
یک گره Get Actor Forward Vector اضافه کنید.
سپس ، یک گره Movement Input اضافه کنید.
این گره یک جهت و مقدار می گیرد و آن را به یک افست ذخیره شده تبدیل می کند.
گره ها را به این صورت وصل کنید :
خط سفید نشان دهنده زنجیره ای از execution است.
به عبارت دیگر ، وقتی بازیکن input axis را حرکت میدهد ، رویدادی ایجاد میشود که گره InputAxis MoveForward را اجرا میکند.
white line نشان می دهد که به محض این که این اتفاق افتاد، گره Add Movement Input را اجرا خواهید کرد.
گره Add Movement Input ورودی های زیر را می گیرد :
Target : روی خود تنظیم کنید که در این مورد بازیکن (مکعب قرمز) است.
World Direction : جهت حرکت هدف که در این حالت جهتی است که بازیکن رو به آن قرار دارد.
Scale Value : میزان حرکت پلیر ، که در این مورد حداکثر سرعت * axis value است (که به یاد داشته باشید، مقداری در محدوده 1- تا 1 است).
روند را برای MoveRight تکرار کنید اما Get Actor Forward Vector را با Get Actor Right Vector جایگزین کنید.
افزودن آفست
برای جابجایی Pawn ، باید افست را با Add Movement Input محاسبه کنید و آن را به مکان Pawn اضافه کنید.
استراتژی شما این است که بازیکن را به مقدار کمی در هر فریم از بازی خود جابجا کنید، بنابراین باید این حرکت را به رویداد Event Tick اضافه کنید، که در هر فریم ایجاد می شود.
به گره Event Tick در Event Graph خود بروید.
برای دریافت افست ، یک گره Consume Movement Input Vector ایجاد کنید.
برای اضافه کردن افست ، یک گره AddActorLocalOffset ایجاد کنید.
پس از آن ، آنها را به این صورت پیوند دهید :
این بدان معناست که برای هر فریم از بازی ، هر ورودی حرکتی ذخیره شده را دریافت کرده و آن را به مکان فعلی اکتر اضافه میکنید.
روی Compile کلیک کنید و به ادیتور اصلی برگردید و روی Play کلیک کنید.
اکنون می توانید در اطراف حرکت کنید!
اگر متوجه شدید که هیچ پاسخی برای فشار دادن کلیدها وجود ندارد ، مطمئن شوید که cursor داخل پنجره بازی است و برای انتخاب آن کلیک کنید.
یک مشکل کوچک وجود دارد : ماشینهای پیشرفته میتوانند فریمها را سریعتر رندر کنند.
از آنجا که Event Tick هر فریم نامیده می شود ، گره های حرکتی بیشتر اجرا می شوند.
این باعث می شود که Pawn moving ماشین های پیشرفته سریعتر حرکت کند و بالعکس.
برای رفع این مشکل ، حرکت شما به frame rate independent نیاز دارد.
Frame Rate Independence
Frame rate independence به این معنی است که همه چیز بدون توجه به Frame rate نتیجه یکسانی خواهد داشت.
خوشبختانه، دستیابی به Frame rate independence در Unreal آسان است.
از بازی خارج شوید و BP_Player را باز کنید.
در مرحله بعد ، به گره Event Tick خود بروید و به Delta Seconds نگاهی بیندازید.
Delta Seconds مدت زمان سپری شده از آخرین Event Tick است.
با ضرب افست خود در Delta Seconds ، حرکت خود را frame rate independent کنید.
به عنوان مثال ، Pawn شما حداکثر سرعت 100 دارد.
اگر یک ثانیه از آخرین Event Tick گذشته باشد، Pawn شما 100 واحد کامل را جابجا می کند.
اگر نیم ثانیه می گذشت 50 واحد حرکت می کرد.
اگر حرکت وابسته به فریم ریت باشد ، Pawn بدون توجه به زمان بین فریمها ، 100 واحد در هر فریم حرکت میکند.
برای ضرب افست خود با Delta Seconds ، با کلیک راست و جستجوی * در dialog ، یک گره multiplication اضافه کنید، همانطور که در شکل زیر نشان داده شده است.
توجه داشته باشید که کانکتورها در ابتدا خاکستری هستند زیرا UE5 نمی داند چه چیزی را می خواهید ضرب کنید، و همانطور که مقادیر را اختصاص می دهید، کانکتورها رنگ داده های ورودی را در نظر می گیرند.
نتیجه نهایی باید به این صورت باشد :
از آنجایی که زمان بین فریم ها (Delta Seconds) بسیار کم است، Pawn شما بسیار کندتر حرکت می کند.
با تغییر مقدار پیش فرض MaxSpeed به 600 این مشکل را برطرف کنید.
تبریک می گویم ، شما به frame rate independence دست یافته اید.
اما همچنان مشکل وجود دارد ؛ شاید متوجه شده باشید که مکعب درست از همه چیز عبور می کند.
برای رفع آن ، باید در مورد collisions بیاموزید.
Actor Collisions
برای collision، یک اکتر نیاز به نمایشی از فضای collision دارد.
برای این امر از یکی از موارد زیر استفاده کنید :
Collision Mesh : این مشها بهطور خودکار (اگر آن را فعال کنید) هنگام import کردن مش ایجاد میشوند.
کاربر همچنین می تواند با استفاده از نرم افزار سه بعدی یک Collision Mesh سفارشی ایجاد کند.
مکعب قرمز از قبل دارای یک auto-generated collision است.
Collision component : این ها به سه شکل می آیند :
- box
- capsule
- sphere
آنها را از طریق پنل Components اضافه کنید.
به طور کلی برای collision ساده استفاده می شود.
در زیر نمونه ای از یک کارکتر و collision آن را مشاهده می کنید.
فعال سازی Collision
احتمالاً از خود میپرسید که چرا مکعب با هم برخورد نکرد، حتی اگر یک collision mesh داشته باشد ؛ وقتی اکتری را جابهجا میکنید، Unreal فقط کامپوننت اصلی را برای کالوژن ها در نظر میگیرد.
از آنجا که کامپوننت ریشه Pawn شما هیچ برخوردی ندارد ، از همه چیز عبور می کند.
توجه : اکتری که کالوژن خود را به عنوان root نداشته باشد همچنان میتواند اکتر های دیگر را مسدود کند.
اما اگر اکتر را حرکت دهید ، با چیزی برخورد نمی کند.
بنابراین ، برای استفاده از collision mesh، StaticMesh باید root باشد.
برای این کار به پنل Components بروید.
بعد ، کلیک چپ کرده و StaticMesh را به DefaultSceneRoot بکشید.
برای تبدیل StaticMesh به root جدید، کلیک چپ را رها کنید.
یک کار دیگر وجود دارد که باید قبل از اینکه کالوژن ها موثر واقع شوند انجام دهید.
به Event Graph بروید و سپس به گره AddActorLocalOffset بروید.
ورودی Sweep را پیدا کرده و با کلیک چپ روی checkbox ، آن را روی true تنظیم کنید.
اساسا، AddActorLocalOffset اکتر را به یک مکان جدید از راه دور منتقل می کند.
Sweep تضمین می کند که اکتر با هر چیزی بین مکان های قدیمی و جدید برخورد می کند.
به main editor بروید و روی Play کلیک کنید.
اکنون مکعب با سطح برخورد می کند.
آخرین کاری که انجام می دهید این است که آیتمی ایجاد کنید که با لمس پلیر ناپدید شود.
ساخت یک آیتم
به طور کلی ، یک آیتم هر چیزی است که بازیکن می تواند جمع آوری کند.
شما از BP_Banana به عنوان آیتم خواهید کرد.
برای تشخیص زمانی که مکعب مورد را لمس می کند، به یک event node نیاز دارید که در هنگام برخورد فعال شود.
از collision responses برای ایجاد چنین رویدادهایی استفاده کنید.
collision response همچنین نحوه واکنش یک اکتر را هنگام برخورد با اکتر دیگر مشخص می کند.
سه نوع collision responses وجود دارد :
Ignore (نادیده گرفتن) ، Overlap (همپوشانی) و Block (مسدود کردن).
در اینجا نحوه تعامل آنها با یکدیگر نشان داده شده است :
اگرچه می توانید از Overlap یا Block استفاده کنید ، این آموزش فقط نحوه استفاده از Overlap را به شما نشان می دهد.
تنظیم Collision Response
از بازی خارج شده و BP_Banana را باز کنید.
کامپوننت StaticMesh را انتخاب کنید و سپس به پنل Details بروید.
بخش Collision جایی است که شما collision response را تنظیم می کنید.
همانطور که می بینید اکثر تنظیمات خاکستری هستند.
برای اینکه آنها را قابل ویرایش کنید ، روی منوی کشویی کنار Collision Presets کلیک چپ کنید.
Custom را از لیست انتخاب کنید.
شما باید collision response بین آیتم و مکعب را مشخص کنید.
کامپوننت ها دارای یک ویژگی به نام object type هستند.
object type فقط یک راه راحت برای گروه بندی اکترهای مشابه است.
از آنجایی که نوع مکعب WorldDynamic است ، میخواهید collision response را به آن نوع تغییر دهید.
در بخش Collision Responses، باید collision response این WorldDynamic را به Overlap تغییر دهید.
این کار را با کلیک چپ بر روی middle checkbox سمت راست WorldDynamic انجام دهید.
Handling Collision
برای handle collision (مدیریت برخوردها) ، باید از overlap event استفاده کنید.
به پنل Components رفته و روی StaticMesh کلیک راست کنید.
از context menu باید Add Event ▸ Add OnComponentBeginOverlap را انتخاب کنید.
این گره OnComponentBeginOverlap (StaticMesh) را به Event Graph شما اضافه می کند.
در نهایت ، یک گره DestroyActor ایجاد کنید و آن را به گره OnComponentBeginOverlap (StaticMesh) پیوند دهید.
همانطور که از نامش پیداست، اکتر مورد نظر را از بازی حذف می کند.
با این حال، از آنجایی که هیچ هدفی وجود ندارد، اکتری را که آن را صدا کرده نابود می کند.
قرار دادن آیتم
Blueprint editor را ببندید و مطمئن شوید که در پوشه Blueprints هستید.
با کلیک چپ و کشیدن BP_Banana به Viewport شروع به dragging BP_Banana در Viewport کنید.
روی Play کلیک کنید و شروع به جمع آوری موز ها کنید.
تبریک بازی شما آماده است.
منبع :
مهرسا امینی
برنامه نویس ، انیماتور ، سئوکار
موفقیت و ثروت برای همه نیست پس متفاوت از دیگران زندگی کن.