[UE5] ๐Ÿค– ํ–‰๋™ํŠธ๋ฆฌ๋กœ AI ์  ๋งŒ๋“ค๊ธฐ (1)

Singery00ยท2024๋…„ 4์›” 16์ผ
0

UE5 Blueprint

๋ชฉ๋ก ๋ณด๊ธฐ
17/29
post-thumbnail
post-custom-banner

๊ฐœ์š”

๐Ÿค– Behavior Tree๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง์ ‘ AI๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์ž.

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” AI๋ฅผ ์žฅ์ฐฉํ•œ ์ ์„ ๊ตฌํ˜„ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
์šฐ์„  ์  ์บ๋ฆญํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ , ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋”ฐ๋ผ๊ฐ„ ํ›„ ๊ณต๊ฒฉํ•˜๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ๊ตฌํ˜„์„ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Ali Elzoheiry๋‹˜์˜ Smart AI ๊ฐ•์˜ ์˜์ƒ์„ ๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
์‹œ๋ฆฌ์ฆˆ์˜ ์–‘์ด ๋งŽ์ง€๋งŒ ์ •๋ฆฌ๊ฐ€ ์•„์ฃผ ์ž˜ ๋˜์–ด ์žˆ์œผ๋‹ˆ ํ•œ๋ฒˆ์”ฉ ์‹œ์ฒญ์„ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

Ali Elzoheiry ์œ ํˆฌ๋ธŒ


๋ณธ๋ก 


๐Ÿ‘ฟ ์  ์บ๋ฆญํ„ฐ ์ƒ์„ฑ

๋ฉ”์‹œ ์ง€์ •

์šฐ์„  ์  ์บ๋ฆญํ„ฐ๋ฅผ ๋จผ์ € ์ƒ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
Blueprint๋ฅผ Character๋กœ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.

Skeltal Mesh๋Š” ์–ธ๋ฆฌ์–ผ5์˜ ๊ธฐ๋ณธ ์ œ๊ณต ๋งˆ๋„คํ‚น์„ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.
์ €๋Š” SKM_Manny๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Transform๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ์บ๋ฆญํ„ฐ ์œ„์น˜๋ฅผ ์žก์•„์ฃผ์‹œ๊ณ ,

์• ๋‹ˆ๋ฉ”์ด์…˜ ์ ์šฉ

์บ๋ฆญํ„ฐ๋ฅผ ์œ„ํ•œ ABP๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ํž˜๋“ญ๋‹ˆ๋‹ค.
์ด๋ฏธ ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ธฐ๋ณธ ABP_Manny๋ฅผ ์ˆ˜์ •ํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
ABP_Manny๋ฅผ ์ฐพ์•„์„œ ๋ณต์‚ฌ ํ›„ ABP_Enemy๋กœ ์ง€์–ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ถ”ํ›„ ์‚ฌ์šฉํ•  AIํด๋”๋„ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“๊ฒ ์Šต๋‹ˆ๋‹ค.

Event Graph ์ˆ˜์ •

AI_Move๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์บ๋ฆญํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋ฉด ๊ธฐ๋ณธ ์ œ๊ณต๋œ ABP_Manny์—์„œ๋Š” ํ•ด๋‹น ์ด๋™์„ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์บ๋ฆญํ„ฐ๊ฐ€ ์›€์ง์ด๋Š”๋ฐ ์ •์ž์„ธ๋กœ ์›€์ง์ด๋Š” ๋ฒ„๊ทธ๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
ํ•ด๋‹น ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด์„œ ABP_Enemy์˜ Event Graph๋ฅผ ์ˆ˜์ •ํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

Cast to BP_Enemy ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€ ๋’ค Sequence์˜ 1๋ฒˆ ์ถœ๋ ฅ์„ ๋ณ€๊ฒฝํ•ด์ฃผ์„ธ์š”.

๊ทธ๋ฆฌ๊ณ  Call Failed๋ฅผ ๊ธฐ์กด ํ๋ฆ„๊ณผ ์ด์–ด์ค๋‹ˆ๋‹ค.

์šฐ์ธก์—์„œ Ground Speed์˜ Greater ๋…ธ๋“œ์—์„œ Should Move ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.

๊ทธ๋ฆฌ๊ณ  Cast to BP_Enemy์˜ ํ๋ฆ„์„ ์ƒˆ๋กญ๊ฒŒ ์ถ”๊ฐ€ํ•œ Should Move ๋…ธ๋“œ์— ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ๋์ž…๋‹ˆ๋‹ค.

โ—์ปดํŒŒ์ผ ์ €์žฅโ—ํ•ด์ฃผ์„ธ์š”.

๐ŸŒณ Behavior Tree

Tree๋ผ์„œ ๋‚˜๋ฌด ์ด๋ชจ์ง€ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.

BT, BB ์ƒ์„ฑ

์ด์ „์— ์ƒ์„ฑํ•œ AIํด๋”์— Behavior Tree ํด๋”๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.
๊ทธ๋ฆฌ๊ณ  Behavior Tree์™€ Black Board๋ฅผ ๊ฐ๊ฐ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.

BT, BB ์—ฐ๊ฒฐ

์ƒ์„ธํ•œ ๋‚ด์šฉ์€ ๋”ฐ๋กœ ํฌ์ŠคํŒ…ํ•˜๊ฒ ์ง€๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด,

Behavior Tree๋Š” ์บ๋ฆญํ„ฐ์˜ ํ–‰๋™ ํŒจํ„ด์— ๋Œ€ํ•ด์„œ ๊ตฌํ˜„์„ ํ•˜๊ณ 
Black Board๋Š” ํ–‰๋™์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์—ญํ• ๋กœ AI์˜ '๋‡Œ'๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

BT_Enemy์— ๋“ค์–ด๊ฐ€์‹œ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋ณด์ž…๋‹ˆ๋‹ค.
Details์— ๋“ค์–ด๊ฐ€์„œ ์ƒ์„ฑํ•œ BB_Enemy์™€ ์—ฐ๊ฒฐํ•ด์ฃผ์„ธ์š”.

BT์˜ ํ๋ฆ„

โ—Behavior Tree๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ๋ฆ„์ด ํ˜๋Ÿฌ ๊ฐ‘๋‹ˆ๋‹คโ—

์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด์„œ ์‹ค์ œ ๋™์ž‘๊ณผ๋Š” ๊ด€๋ จ์—†๋Š” ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์€ ํ–‰๋™ํŠธ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ, ์ขŒ์ธก๋ถ€ํ„ฐ ํ๋ฆ„์ด ํ˜๋Ÿฌ๊ฐ€ A,B,C๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์‹คํ–‰์ด ๋ฉ๋‹ˆ๋‹ค.

ํŠธ๋ฆฌ ์ƒ์„ฑ

์•„๋ž˜์˜ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์„œ ๊ตฌํ˜„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ๋‹ค๊ฐ€๊ฐ„๋‹ค.
  2. ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๊ณต๊ฒฉํ•œ๋‹ค.

BB์—์„œ Key ์ถ”๊ฐ€

์ด๋™, ๊ณต๊ฒฉ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋Œ€์ƒ ๋ชฉํ‘œ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด๋Š” BlackBoard์—์„œ Key๋กœ ๋“ฑ๋กํ•˜์—ฌ ์‚ฌ์šฉํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์šฐ์ธก ์ƒ๋‹จ์˜ BlackBoard๋ฅผ ๋ˆŒ๋Ÿฌ BB๋กœ ์ด๋™ํ•ด์ค๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ขŒ์ธก์—์„œ New Key๋ฅผ ๋ˆŒ๋Ÿฌ AttackTarget๋ฅผ Object๋กœ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.
๊ทธ๋ฆฌ๊ณ  ์šฐ์ธก์—์„œ Key Type - Base Class๋ฅผ Actor๋กœ ์ง€์ •ํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

Tree ์ƒ์„ฑ

์—ฌ๋Ÿฌ ํ–‰๋™์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Sequence ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํ•˜์œ„์— Move To ๋…ธ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.

Move To๋…ธ๋“œ๋Š” ์บ๋ฆญํ„ฐ๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์„ค์ •ํ•œ ๊ฐ’์œผ๋กœ ์ด๋™ํ•˜๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.
Acceptable Radius๋Š” ํ—ˆ์šฉ๋ฒ”์œ„์ž…๋‹ˆ๋‹ค.
์บ๋ฆญํ„ฐ๊ฐ€ ์ด๋™ํ•  ๋•Œ ์บ๋ฆญํ„ฐ์™€์˜ ์›”๋“œ ์ขŒํ‘œ๊ฐ€ ๋˜‘๊ฐ™์„ ์ˆ˜๋Š” ์—†๊ฒ ์ฃ ?
๊ทธ๋ž˜์„œ ํ—ˆ์šฉ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•ด์ฃผ๋Š” ๊ฒ๋‹ˆ๋‹ค.
์ ๋‹นํžˆ 150์œผ๋กœ ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.
๋˜ํ•œ Move To๋ฅผ ํ•  ๋Œ€์ƒ์„ BlackBoard Key๋กœ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
BB์—์„œ ์ƒ์„ฑํ•œ AttackTarget์œผ๋กœ ๋ณ€๊ฒฝํ•ด์ค์‹œ๋‹ค.

๐ŸŽฎ AI Controller

AttackTarget์€ ์ง€๊ธˆ ๋นˆ ๊ป๋ฐ๊ธฐ์ž…๋‹ˆ๋‹ค.
์‹ค์ œ๋กœ ๊ฐ’์„ ํ• ๋‹นํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

AIC ์ƒ์„ฑ

AI Controller๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.
Blueprint Class๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.

BT ์—ฐ๊ฒฐ

Event On Possess ๋…ธ๋“œ์—์„œ ํ๋ฆ„์„ ์ด์–ด ์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.
Run Behavior Tree ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ BTAsset์„ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  BT_Enemy๋กœ ์—ฐ๊ฒฐํ•ด์ฃผ์„ธ์š”.

์ขŒ์ธก์˜ My Blueprint์—์„œ BlackBoard๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์„ค์ •์—์„œ Show Inherited Variables๋ฅผ ์ฒดํฌํ•ด์•ผ ๋ณด์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Set Value As ..๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์šฐ๋ฆฌ๊ฐ€ ์„ค์ •์„ ์›ํ•˜๋Š” ํƒ€์ž…์„ ๋„ฃ์–ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Key Name์€ ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ๋ ค๋Š” BB์˜ KeyName์„ ๋„ฃ์–ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ณ€์ˆ˜๋กœ ๋งŒ๋“ค์–ด ์ฃผ์‹œ๊ณ  ์ด๋ฆ„์€ Attack Target Key Name์ด๋ผ๊ณ  ํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ปดํŒŒ์ผ ํ›„ Default๊ฐ’์„ ์‹ค์ œ BB์™€ ๋™์ผํ•œ ์ด๋ฆ„์„ ๋„ฃ์–ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ๋ ค๋Š” BB์˜ KeyName์„ ๋ณต์‚ฌํ•ด์„œ,

์ƒ์„ฑํ•œ Key Name ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋„ฃ์–ด ์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.
๋งคํ•‘ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์ฃผ์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  AttackTarget์˜ ๋Œ€์ƒ์˜ ํ”Œ๋ ˆ์ด์–ด์˜ ์บ๋ฆญํ„ฐ์ž…๋‹ˆ๋‹ค.
Get Player Character ๋„ฃ์–ด ์ฃผ์„ธ์š”.

โ—์ปดํŒŒ์ผ ์ €์žฅโ—ํ•ด์ฃผ์„ธ์š”.

๐Ÿ‘ฟ BP_Enemy ์ˆ˜์ •

BP_Enemy์˜ AI Controller Class๋ฅผ ์šฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑํ•œ AIC_Enemy๋กœ ๋ณ€๊ฒฝํ•ด์ค๋‹ˆ๋‹ค.

๐Ÿ—บ๏ธ Nav Mesh Bounds Volume

Nav Mesh Bounds Volume์„ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ Nav Mesh๋ฅผ ๊ณ„์‚ฐํ•ด์„œ ์บ๋ฆญํ„ฐ๊ฐ€ ์›€์ง์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ถ”๊ฐ€ํ•œ ํ›„ AI๊ฐ€ ์›€์ง์ผ ๋งต ๋ฒ”์œ„๋ฅผ ๋ฎ์–ด์ฃผ์„ธ์š”.

๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰ํ•˜๋ฉด ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋”ฐ๋ผ์˜ค๋Š”๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โš”๏ธ ๊ณต๊ฒฉ ๋ชจ์…˜ ์ถ”๊ฐ€

๊ณต๊ฒฉ ์ปค์Šคํ…€ ์ด๋ฒคํŠธ ์ถ”๊ฐ€

๊ฐ์ž์˜ ๊ฐ„๋‹จํ•œ ๊ณต๊ฒฉ๋ชจ์…˜์„ ๋ชฝํƒ€์ฃผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ์„ธ์š”.
๊ทธ๋ฆฌ๊ณ  BP_Enemy์—์„œ Custom Event๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ €๋Š” Play Montage ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Task ์ถ”๊ฐ€

์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋ชจ๋“  AI์˜ ํ–‰๋™์ด ๊ตฌํ˜„๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ์ž‘์—…์„ ์ƒ์„ฑํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ƒ๋‹จ์˜ New Task๋ฅผ ๋ˆŒ๋Ÿฌ BTT_DefaultAttack์ด๋ผ๋Š” Task๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

Task ์ž‘์„ฑ

Task์— ๋“ค์–ด์˜ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์•„๋ž˜ 2๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.

์ด๋ฒคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ฒ ๋‹ค.
์‹คํ–‰์„ ์ข…๋ฃŒํ•œ๋‹ค.

๋ฅผ ์•Œ๋ฆฌ๋Š” ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค.
Finish Execute์˜ Success๋Š” ์ฒดํฌํ•ด์ฃผ์„ธ์š”.

๊ทธ๋ฆฌ๊ณ  Controlled Pawn์—์„œ BP_Enemy๋ฅผ Castํ•ด์ฃผ๊ณ  Attack ์ด๋ฒคํŠธ๋ฅผ ํ˜ธ์ถœํ•ด์ค๋‹ˆ๋‹ค.

โ—์ปดํŒŒ์ผ ์ €์žฅโ—ํ•ด์ฃผ์„ธ์š”.

BT ์ˆ˜์ •

๋‹ค์‹œ Behavior Tree๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Btt_DefaultAttack ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.
์ขŒ์šฐ ํ๋ฆ„์„ ๋”ฐ๋ผ Move To ์šฐ์ธก์— ๋„ฃ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰ํ•ด์ฃผ๋ฉด ๊ณต๊ฒฉ ๋ชจ์…˜์ด ๋‚˜์˜ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ด๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์™„๋ฃŒํ•˜๊ธฐ ์ „์— ๋„ˆ๋ฌด ๋น ๋ฅด๊ฒŒ ํ–‰๋™์ด ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ฒซ๋ฒˆ์งธ ๋ฐฉ๋ฒ•, BT ์ˆ˜์ •

์•„์ฃผ ๊ฐ„๋‹จํ•˜๊ฒŒ๋Š” Wait๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒ๋‹ˆ๋‹ค.
์ ๋‹นํžˆ 2.5์ดˆ์˜ Wait๋ฅผ ๋„ฃ์–ด์„œ ๋ชจ์…˜์ด ๋๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ๋„ฃ์–ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

๋‘๋ฒˆ์งธ ๋ฐฉ๋ฒ•, ์ข…๋ฃŒ ์ด๋ฒคํŠธ ํ˜ธ์ถœ

ํ•˜์ง€๋งŒ ๋ณ„๋กœ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์•„๋‹Œ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ข…๋ฃŒ๋˜๋ฉด Finish Execute๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

BP_Enemy๋กœ ์ด๋™ํ•ด์„œ ์•„๋ž˜์—์„œ Event Dispatchers๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  OnAttackEnd๋ฅผ Call๋กœ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.
Play Motage์˜ On Complete๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์˜ ์‹คํ–‰์ด ๋๋‚˜๋ฉด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
On Interrupted๋Š” ์ค‘๊ฐ„์— ์ข…๋ฃŒ๋˜์—ˆ์„ ๋•Œ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ์ถœ๋ ฅ๊ณผ ์ด์–ด์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ข…๋ฃŒ ์‹œ Attack End๊ฐ€ ํ˜ธ์ถœ๋˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋‹ค์‹œ BTT_DefaultAttack์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  BP_Enemy์—์„œ ๋Œ์–ด์™€์„œ Assign On Attack End๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด Finish Execute๋กœ ๋„˜์–ด๊ฐ€๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

ํ๋ฆ„์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด์„œ ์„ค๋ช…ํ•ด๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ข…๋ฃŒ์‹œ Call On Attack End ์ด๋ฒคํŠธ ํ˜ธ์ถœ
    ํ˜น์€ On Intrrupted ๋ฐœ์ƒ ์‹œ
  2. Call On Attack End ์ด๋ฒคํŠธ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด Task ์‹คํ–‰ ์ข…๋ฃŒ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.

โ—์ปดํŒŒ์ผ ์ €์žฅโ—ํ›„ ํ”Œ๋ ˆ์ด ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ณต๊ฒฉ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ํ๋ฆ„์ด ๋„˜์–ด๊ฐ€์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋งˆ๋ฌด๋ฆฌ

์ด๊ฒƒ์œผ๋กœ AI๊ฐ€ ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋”ฐ๋ผ๊ฐ€์„œ ๊ณต๊ฒฉํ•˜๋Š” ๋ถ€๋ถ„๊นŒ์ง€ ๊ตฌํ˜„์„ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”๋ฐ ๋ฐ”๋กœ ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋ฐ”๋ผ๋ณด์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ˆ˜์ •๊ณผ ์ถ”๊ฐ€ ๊ตฌํ˜„์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์— ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

profile
๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜์–ด๋ณด์ž
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€