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

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

UE5 Blueprint

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

๊ฐœ์š”

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

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” AI์—๊ฒŒ ๋ฌด๊ธฐ๋ฅผ ์žฅ์ฐฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์„ค๋ช…์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด์„œ
ํ–‰๋™ํŠธ๋ฆฌ (Behavior Tree)๋Š” ์•ž์œผ๋กœ BT๋กœ,
๋ธ”๋ž™๋ณด๋“œ (Black Board)๋Š” ์•ž์œผ๋กœ BB๋กœ,
AI Controller๋Š” AIC๋ผ๊ณ  ๋ถ€๋ฅผ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

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

Ali Elzoheiry ์œ ํˆฌ๋ธŒ


๋ณธ๋ก 


๐Ÿ—ก๏ธ BP_Sword ์ œ์ž‘

์ ๋‹นํ•œ ์นผ ์—์…‹์„ ์ถ”๊ฐ€ํ•œ ๋’ค์— BP_Sword๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

๐ŸŽ› Socket ์žฅ์ฐฉ

๋ฌด๊ธฐ ์žฅ์ฐฉ์€ ์ด์ „์— ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์ด์„ ์ถ”๊ฐ€ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
์˜ค๋ฅธ์†์— Sword๋ผ๋Š” ์†Œ์ผ“์„ ์ถ”๊ฐ€ํ•œ ๋’ค์— Sword๋ฅผ Preview Asset์œผ๋กœ ๋„ฃ์–ด์„œ ์œ„์น˜๋ฅผ ์žก์•„์ฃผ์„ธ์š”.

โš”๏ธ ๋ฌด๊ธฐ ์žฅ์ฐฉ ๋กœ์ง

BP_Enemy๋กœ ์ด๋™ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Custom Event๋ฅผ ํ•˜๋‚˜ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.
Equip Sword๋ผ๊ณ  ์ด๋ฆ„ ์ง€์–ด ์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ž ๊ทธ๋ฆฌ๊ณ  SpwanActorFromClass๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.

์ด ๋…ธ๋“œ๋ฅผ ์ปค์Šคํ…€ ์ด๋ฒคํŠธ์™€ ์—ฐ๊ฒฐํ•ด์ฃผ์„ธ์š”.
๊ทธ๋ฆฌ๊ณ  Class๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑํ•œ BP_Sword๋กœ ๋ณ€๊ฒฝํ•ด์ฃผ์„ธ์š”.
Spawn Transform์—๋Š” Get Actor Transform์„ self๋กœ ๋„ฃ์–ด์ฃผ์„ธ์š”.

์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ BP_Sword๋ผ๋Š” ์•กํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋กœ์ง์ž…๋‹ˆ๋‹ค.
์ด์ œ BP_Sword๋ฅผ ํ”Œ๋ ˆ์ด์–ด์˜ ์˜ค๋ฅธ์†์— ์žฅ์ฐฉํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋Š” Attach Actor To Component๋ผ๋Š” ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
ํ•˜๋‚˜์”ฉ ์„ค์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  1. ํ๋ฆ„์„ ์ด์–ด์ฃผ์„ธ์š”.
  2. BP_Enemy์˜ Mesh๋ฅผ Parent์— ๋„ฃ์–ด ์ฃผ์„ธ์š”.
  3. Socket Name์—๋Š” ์˜ค๋ฅธ์†์— ๋งŒ๋“ค์—ˆ๋˜ ์นผ์„ ์žฅ์ฐฉํ•  Socket Name์„ ๋˜‘๊ฐ™์ด ๋„ฃ์–ด ์ฃผ์„ธ์š”.
  4. ๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜ Rule์€ ๋ชจ๋‘ Snap to Target์œผ๋กœ ํ•ด์ฃผ์„ธ์š”.

์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€ ๋ณด๊ธฐ ์œ„ํ•ด ์ž„์‹œ๋กœ Begin Play์—์„œ Equip Sword๋ฅผ ํ˜ธ์ถœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

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

์ ์ด ์นผ์„ ์ž˜ ๋“ค๊ณ  ํœ˜๋‘๋ฅด๋Š”๊ฑธ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค!

๐Ÿ“‹ Equip Sword ํƒœ์Šคํฌ ์ƒ์„ฑ

BT๋กœ ์ด๋™ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  BTT_EquipSword๋ผ๋Š” ํƒœ์Šคํฌ๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰ ๋…ธ๋“œ๋ฅผ ๋‹น์—ฐํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.

BP_Enemy๋ฅผ Castํ•˜๊ณ  EquipSword๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

๐ŸŒณ BT ์ˆ˜์ •

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด Equip Sword Task๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.

ํ•˜์ง€๋งŒ ์ด๋Š” ์ด๋ฏธ ์นผ์„ ์žฅ์ฐฉํ•œ ์ƒํƒœ์—ฌ๋„ ๊ณ„์†ํ•ด์„œ ์žฅ์ฐฉ์„ ๋ฐ˜๋ณตํ•˜๊ฒ ์ฃ ?

์ด๋ฅผ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ด์„œ ์นผ์„ ์žฅ์ฐฉํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

isEquipSword ๋ณ€์ˆ˜ ์ถ”๊ฐ€

BP_Enemy์—๊ฒŒ ์ด๋™ํ•ด์„œ isEquipSword๋ณ€์ˆ˜๋ฅผ Boolean์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Equip Sword ์ปค์Šคํ…€ ์ด๋ฒคํŠธ์˜ ๋งˆ์ง€๋ง‰์— ๋ณ€์ˆ˜๋ฅผ True๋กœ Setํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด ์ž„์‹œ๋กœ ์—ฐ๊ฒฐํ–ˆ๋˜ Begin Play ํ๋ฆ„์„ ๋Š์–ด์ฃผ์„ธ์š”.

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

Decorator

๐ŸŽจDecorator ์ƒ์„ฑ

ํƒœ์Šคํฌ ์ƒ์„ฑ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ƒ๋‹จ์—์„œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”.
Test๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค!

๊ทธ๋ฆฌ๊ณ  Decorator๋ผ๋Š” ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ์•ˆ์— BTD_IsEquipSword๋กœ ์ƒ์„ฑํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

Decorator ์ž‘์„ฑ

๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์ž‘์„ฑ ์—๋””ํ„ฐ ์ฐฝ์ด ์ผœ์ง€๋ฉด ์ขŒ์ธก Function์„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋งˆ์šฐ์Šค๋ฅผ ๋Œ€๋ณด๋ฉด Override ๋ฒ„ํŠผ์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

๊ฑฐ๊ธฐ์„œ Perform Condition Check AI๋ฅผ ์„ ํƒํ•ด์ค๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์กฐ๊ฑด์„ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ๋…ธ๋“œ๋“ค์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

BP_Enemy๋ฅผ Castํ•ด์„œ Is Equip Sword ๋ณ€์ˆ˜๋ฅผ Getํ•ด์„œ ๋ฆฌํ„ด๊ฐ’์— ๋„ฃ์–ด ์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

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

๐ŸŽจDecorator ์ถ”๊ฐ€

Equip Sword ํƒœ์Šคํฌ ๋…ธ๋“œ๋ฅผ ์šฐํด๋ฆญํ•ด์ฃผ์„ธ์š”.
๊ทธ๋ฆฌ๊ณ  ํ•˜๋‹จ์˜ Add Decorator๋ฅผ ์„ ํƒ ํ›„ ์šฐ๋ฆฌ๊ฐ€ ์ƒ์„ฑํ•œ BTD๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ์ถ”๊ฐ€ํ•ด์ฃผ์„ธ์š”.

์ถ”๊ฐ€๊ฐ€ ๋˜๋ฉด ์ƒ๋‹จ์— ํŒŒ๋ž€์ƒ‰ ๋…ธ๋“œ๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ํŒŒ๋ž€์ƒ‰ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ํด๋ฆญํ•ด์ฃผ์„ธ์š”.

๊ทธ๋Ÿผ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์˜ Details๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
IsEquipSword๊ฐ€ False์ธ ๊ฒฝ์šฐ์—๋งŒ ๋…ธ๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‹ˆ Inverse Condition์„ ์ฒดํฌํ•ด์ฃผ์„ธ์š”.

๐ŸŒณ BT ์ˆ˜์ •

์ž ์šฐ๋ฆฌ๋Š” Sequence๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด ์ „์ฒด๊ฐ€ ์‹คํŒจํ•œ๋‹ค๊ณ  ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ ์นผ์„ ์ด๋ฏธ ์ฐจ๊ณ  ์žˆ๋‹ค๋ฉด, ์ดํ›„์˜ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š์„ ๊ฒ๋‹ˆ๋‹ค.

์ด๋Š” Equip Sword๋ฅผ ๋ถ„๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด์ฃ .

Selector๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ๋ถ„๋ฆฌํ•ด์ฃผ์„ธ์š”.

๊ทธ๋ฆฌ๊ฑฐ ์‹คํ–‰ ํ›„ ํ๋ฆ„์„ ์‚ดํŽด๋ณด๋ฉด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋งˆ๋ฌด๋ฆฌ

์ด๊ฒƒ์œผ๋กœ ๊ณต๊ฒฉ์ „์— ํ”Œ๋ ˆ์ด์–ด๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ , ํ–‰๋™ ์ด์ „์— ํฌ์ปค์Šค๊ฐ€ ํ’€๋ฆฌ๋„๋ก ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ด๊ฒŒ ์ •์„์€ ์•„๋‹ˆ๋‹ˆ ๊ฐ์ž์˜ ๋™์ž‘ ํ๋ฆ„์— ๋งž๊ฒŒ ์‚ฌ์šฉํ•ด๋ณด์„ธ์š”.

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

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

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