๋‹ค์Œ ์ผ์ง€๋Š” ๋ชฌ์Šคํ„ฐ ์ถ”๊ฐ€ + ๋ชฌ์Šคํ„ฐ AI๊ฐ€ ๋  ์˜ˆ์ •์ด์—ˆ๋Š”๋ฐ


AI์˜ ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ์žˆ๋˜ FSM์— ๊ฝค ๋งŽ์€ ๊ฐœํŽธ์ด ์˜ˆ์ƒ๋˜์–ด ์ž ์‹œ ์‰ฌ์–ด๊ฐˆ ๊ฒธ ๋‹ค๋ฅธ๊ฑฐ์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๋‹ค๋ค„๋ณผ๊นŒ ํ•œ๋‹ค.


ํ˜„์žฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๋ฌผ๋ฆฌ๊ด€๋ จ๋œ ๋‚ด์šฉ์ด๋‹ค.






LeoECS์—์„œ๋Š” ๋ฌผ๋ฆฌ๊ด€๋ จ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋”ฐ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋•Œ๋ฌธ์— ์ง์ ‘ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด ์ค˜์•ผ ํ–ˆ๋Š”๋ฐ


๋‚ด ๋ฌผ๋ฆฌ์ง€์‹์€ ๊ณ ๋“ฑํ•™๊ต๋•Œ ๊ณตํ†ต๊ณผํ•™์ˆ˜์ค€์— ๋จธ๋ฌผ๋Ÿฌ ์žˆ์—ˆ๊ธฐ ๋–„๋ฌธ์— ์•„์ฃผ ๊ฐ„๋‹จํ•œ 2D ๋ฌผ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค.


์ •๋ง ๋น„์›ƒ์Œ ๋‹นํ•ด๋„ ํ• ๋ง์ด ์—†์„ ์ •๋„๋กœ ๊ฐ„๋‹จํ•œ ๋ฌผ๋ฆฌ ๊ตฌํ˜„์ด๋‹ค..




์ถฉ๋Œ ์ฒดํฌ


์ผ๋‹จ ๊ฒŒ์ž„์—์„œ ๋ฌผ๋ฆฌ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชฉ์ ์€ ํฌ๊ฒŒ ๋‘๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.


1. ํŠน์ • ๊ตฌ์—ญ์— ๋ฌด์—‡์ด ์žˆ๋Š”์ง€๋ฅผ ํƒ์ƒ‰

2. ๋ฌผ์ฒด๋Š” ์„œ๋กœ ๊ฒน์น˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ์ฒ˜๋ฆฌ


1๋ฒˆ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ๊ฒƒ์€ '๋ฌผ์ฒด'๋ผ๋Š” ๊ฒƒ์— '๋ชจ์–‘'์ด๋ผ๋Š” ๊ฒƒ์ด ์ •์˜๋˜์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ Shape๋ผ๊ณ  ์ •์˜ํ•˜์˜€๋‹ค(์œ ๋‹ˆํ‹ฐ์—๋Š” Collider๋ผ๋Š” ๊ฒƒ์ด ์žˆ์Œ)



๋ชจ์–‘๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฌผ์ฒด๋Š” ์œ„์น˜๋ฅผ ๊ฐ€์ง„๋‹ค. ์ด๋„ ์—ญ์‹œ Transform์— Pos๋กœ ์ •์˜ํ•จ


์–ด๋А ํŠน์ • ๊ตฌ์—ญ์— ๋ฌผ์ฒด๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค๋Š” ๋ง์€ ์ข€๋” ์ž์„ธํ•˜๊ฒŒ ๋งํ•œ๋‹ค๋ฉด


์–ด๋А ํŠน์ • ์œ„์น˜์— Shape๊ณผ ๊ฒน์น˜๋Š” Shape๋“ค์ด ๋ฌด์—‡์ด ์žˆ๋Š”๊ฐ€๋กœ ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.


๊ทธ๋ ‡๋‹ค๋ฉด Shape๊ณผ Shape์ด ๊ฒน์น˜๋Š”์ง€๋ฅผ ์ฒดํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์„๊นŒ?



1. AABB vs AABB

AABB๋Š” AxisAlignedBoundingBox(์ขŒํ‘œ์ถ•๊ณผ ํ‰ํ–‰ํ•˜๊ฒŒ ๋†“์ธ ๋ฐ•์Šค?)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ด๊ฑธ ์“ฐ๋Š” ์ด์œ ๋Š” ๊ณ„์‚ฐ์ด ํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


์–ด๋””์„ ๊ฐ€ ๊ธ์–ด์˜จ ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ์€ ๊ธฐ์–ต์ด ์•ˆ๋‚œ๋‹ค.. ๊ฒน์น˜๋ฉด true ์•ˆ๊ฒน์น˜๋ฉด false์ผ๊ฒƒ์ด๋‹ค.






2. Circle vs Circle

์›๊ณผ ์›์ด ๊ฒน์น˜๋Š”์ง€ ํŒ๋ณ„ํ•˜๋Š”๊ฑด ๋น„๊ต์  ์‰ฝ๋‹ค.๊ทธ๋ƒฅ ์ค‘์‹ฌ๊ฐ„์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ๋‘ ์›์˜ ๋ฐ˜์ง€๋ฆ„๋ณด๋‹ค ํฌ๋ฉด ๋จ.





3. AABB vs Circle

AABB์™€ Circle์ด ๊ฒน์น˜๋Š” ๊ฑด ๋ญ, ๊ธฐ์–ต์ด ์•ˆ๋‚œ๋‹ค. ์ฃผ์„์„ ๋ณด๋‹ˆ๊นŒ ๋‚ด๊ฐ€ ์–ด๋”” ๊ธ์–ด๋‹ค์“ด๊ฑฐ๊ฐ™์€๋ฐ.


(๋ด๋„ ๋ญ”์ง€๋ชจ๋ฅด๊ฒ ๋‹ค)

https://learnopengl.com/In-Practice/2D-Game/Collisions/Collision-detection


์œ„์— ๊ฒƒ๋“ค์„ ์ด์šฉํ•˜๋ฉด ๋ฌผ์ฒด ์•ˆ์— ๋ฌด์—‡๋“ค์ด ๋“ค์–ด์žˆ๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€, ๊ทธ๋ƒฅ ๊ฒŒ์ž„์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  'Shape'๋“ค์„ for๋ฌธ์„ ๋Œ๋ฉด์„œ ์ฒดํฌํ•ด์ฃผ๋ฉด ๋˜๋Š”๊ฒƒ



๋งŒ์•ฝ ๋ฌผ์ฒด๊ฐ€ ๋ง‰ 10000๊ฐœ ์ด์ƒ์ด๋ฉด? BroadPhase


๋ฌผ์ฒด๊ฐ€ 10000์ด์ƒ์ด๋ฉด ๋ญ”๊ฐ€ ์ถฉ๋Œํ•˜๋Š”์ง€ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด 10000๊ฐœ์˜ ๋ฌผ์ฒด๋“ค๊ณผ์˜ ์ถฉ๋Œ๊ฒ€์‚ฌ๋ฅผ ๋‹ค ํ•ด์•ผํ•˜๋Š”๋ฐ, ์ด ๊ณผ์ •์€ ๊ฒŒ์ž„ ํผํฌ๋จผ์Šค์— ๋งค์šฐ ์น˜๋ช…์ ์ผ ์ˆ˜ ์žˆ๋‹ค. ๋•Œ๋ฌธ์— ๋ญ”๊ฐ€ ํ•ด๊ฒฐ์ฑ…์ด ํ•„์š”ํ•˜๋‹ค.


Circle์ด๋“  AABB๋“  ๋˜๋‹ค๋ฅธ CustomShape์ด๋“  ์ผ๋‹จ ์ „๋ถ€ AABB๋กœ ๊ณ„์‚ฐ์„ ํ•œ๋‹ค๋ฉด?



(์œ ๋‹ˆํ‹ฐ์˜ BoundingBox)


์›์ด๋“  CustomShape๋“  ๊ทธ Shape๋ฅผ ๊ฐ์‹ธ๋Š” AABB๋กœ ๊ฐ€์ •ํ•œ๋‹ค๋ฉด? AABB๋Š” ๊ฒ€์‚ฌ๋กœ์ง์ด ๋งค์šฐ ์ €๋ ดํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค.์ด๋ฅผ ๋ฌผ๋ฆฌ์—”์ง„์—์„  BroadPhase ๋‹จ๊ณ„๋ผ๊ณ  ํ•œ๋‹ค


์œ ๋‹ˆํ‹ฐ์— ์กด์žฌํ•˜๋Š” BoundingBox๊ฐ€ ๋ฐ”๋กœ ๊ทธ๊ฒƒ. ๋ฌผ๋ฆฌ๊ณ„์‚ฐ์—๋„ ์“ฐ์ด๊ณ , ๋ Œ๋”๋งํ•  ๋ฌผ์ฒด๋ฅผ ํ•„ํ„ฐํ•˜๋Š”๋ฐ๋„ ์“ฐ์ธ๋‹ค.


QuadTree


์—ฌ๊ธฐ์— BroadPhase๋‹จ๊ณ„๋กœ ํ•˜๋‚˜ ๋” ์žˆ๋‹ค. ๊ทธ๊ฒƒ์€ Shape๋“ค์„ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ์• ์ดˆ๋ถ€ํ„ฐ ํƒ์ƒ‰์ด ์šฉ์ดํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋“ค๊ณ  ์žˆ๋Š” ๊ฒƒ.

BSP,QuadTree,Octree ๋“ฑ ์–ด๋””์„œ ์ง€๋‚˜๊ฐ€๋ฉด์„œ ๋“ค์–ด๋ณธ์ ์ด ํ•œ๋ฒˆ์ฏค ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” QuadTree๋ฅผ ์“ฐ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ด๊ฑธ ์ค‘์ ์œผ๋กœ ๋Œ€์ถฉ ์„ค๋ช…ํ•œ๋‹ค.


QuadTree๋Š” ๋„ˆ๋ฌด ๋”ฅํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด ๋‚˜๋„ ์ž์‹ ์ด ์—†์–ด์„œ, ๋Œ€์ถฉ ๋А๋‚Œ์œผ๋กœ ๋งํ•˜์ž๋ฉด. ์šฐ๋ฆฌ๊ฐ€ ์‚ด๊ณ ์žˆ๋Š” ๊ณณ์— ๋Œ€ํ•œ ์ฃผ์†Œ์™€ ๊ฐ™๋‹ค.


๊น€๊ฐœ๋˜ฅ = ์„œ์šธ,๊ณ ์–‘์‹œ,๋•์–‘๊ตฌ,ํ–‰์‹ ๋™
๊น€์‡ ๋˜ฅ = ์„œ์šธ,๊ณ ์–‘์‹œ,๋•์–‘๊ตฌ,ํ™”์ •๋™
๊น€๋ผ๋˜ฅ = ์„œ์šธ,๊ด‘์ฃผ์‹œ,๋‚จํ•œ์‚ฐ์„ฑ๋ฉด


์ด๋ ‡๊ฒŒ ์„ธ ์‚ฌ๋žŒ์˜ ์œ„์น˜์ •๋ณด๊ฐ€ ์žˆ๊ณ , ๋งŒ์•ฝ ๋‚ด๊ฐ€ ํƒ์ƒ‰ํ•˜๋ ค๋Š” ๊ณณ์ด "๋•์–‘๊ตฌ"๋ผ๊ณ  ํ•œ๋‹ค๋ฉด, ๊น€๊ฐœ๋˜ฅ,๊น€์‡ ๋˜ฅ๋งŒ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ›์•„ ํƒ์ƒ‰ํ•˜๋ฉด ๋œ๋‹ค.

๊น€๋ผ๋˜ฅ์€ ์• ์ดˆ๋ถ€ํ„ฐ ๊ฑธ๋Ÿฌ์ง€๋Š” ๊ฒƒ์ด๋‹ค.


์ด๊ฒŒ ๊ฐ€๋Šฅํ•˜๋ ค๋ฉด ์ „์ œ๊ฐ€, ์• ์ดˆ๋ถ€ํ„ฐ ์ด๋“ค์˜ ์ง€์—ญ์„ ๋ฏธ๋ฆฌ ๋ผ๋ฒจ๋งํ•˜์—ฌ ๊ตฌ์กฐํ™” ํ•ด๋†”์•ผ ํ•œ๋‹ค.





QuadTree๋Š” depth๋ผ๋Š”๊ฒŒ ์žˆ๋‹ค. depth=0์€ worldํฌ๊ธฐ๊ฐ€ 300,300์ด๋ผ๋ฉด ๋”ฑ 300,300ํฌ๊ธฐ์ด๋‹ค.

depth=1๋กœ ๋“ค์–ด๊ฐ€๋ฉด ๊ตฌ์—ญ์„ 4๊ณณ์œผ๋กœ ๋‚˜๋ˆ ์„œ

1๊ตฌ์—ญ x:-150~0 y:0~150

2๊ตฌ์—ญ x:0~150 y:0~150

3๊ตฌ์—ญ x:-150~0 y:-150~0

4๊ตฌ์—ญ x:0~150 y:-150~0

์œผ๋กœ ์ •์˜ํ•œ๋‹ค. depth2๊ฐ€๋˜๋ฉด 1๊ตฌ์—ญ ์•ˆ์—์„œ ๋˜ 4๊ตฌ์—ญ์œผ๋กœ ๋‚˜๋‰˜๊ณ  ๊ทธ๊ฒƒ์„ ๋ށ์Šค๋งŒํผ ๋ฐ˜๋ณตํ•œ๋‹ค


๋งŒ์•ฝ depth๊ฐ€ 3๋‹จ๊ณ„๊นŒ์ง€ ์žˆ๊ณ , A๋ผ๋Š” ๋ฌผ์ฒด๊ฐ€ x:-149,y:149์— ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด

A๋Š” depth=2๋‹จ๊ณ„์— 1๋ฒˆ์งธ ๊ตฌ์—ญ์— ์†ํ•˜๊ฒŒ ๋œ๋‹ค.


์˜ˆ์‹œ)



์ด๋ ‡๊ฒŒ QuadTree์•ˆ์— ๋ชจ๋“  Shape๋“ค์„ ๋จผ์ € ๊ตฌ์กฐํ™” ํ•˜์—ฌ ๋„ฃ์–ด๋†“์•˜๋‹ค๋ฉด

QuadTree์—๊ฒŒ ํƒ์ƒ‰ํ•˜๊ณ ์ž ํ•˜๋Š” Shape๊ณผ ์œ„์น˜๋ฅผ ์ฃผ๋ฉด ๊ทธ์— ํ•ด๋‹น๋˜๋Š” depth์— ๊ตฌ์—ญ๊ณผ ์ผ์น˜ํ•˜๋Š” ๋…€์„๋“ค์„ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.


๊ฒŒ์ž„๋‚ด์—์„œ ํŠน์ •๋ฒ”์œ„์— ์žˆ๋Š” ์ ์„ ํƒ์ƒ‰ํ• ๋•Œ๋„ QuadTree๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋น ๋ฅด๊ฒŒ ์ ์„ ์ฐพ์„ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.


์ผ๋‹จ Shape๋“ค์„ QuadTreeํ˜•ํƒœ๋กœ ์ž๋ฃŒ๊ตฌ์กฐํ™”๋ฅผ ํ•˜๊ณ 





ํŠน์ • ๋ฒ”์œ„์— ๋Œ€์ƒ์„ ์ฐพ๊ณ ์ž ํ•œ๋‹ค๋ฉด



(๋ฐ”๋‹ฅ์— ์ ์ด ๋งž์„ Hitbox ๋Œ€์ƒ์„ ์ฐพ๋Š” ๊ฒƒ๋„)


(QuadTree์— AABB๋กœ ์ฟผ๋ฆฌํ•˜์—ฌ ๋Œ€์ƒ์„ ์„ ๋ณ„ํ•˜๋Š” ๊ฒƒ)


์˜ˆ์ „์— RTS ๋™์ ํšŒํ”ผ๋•Œ ์ผ๋˜ ๋ฌผ๋ฆฌ๊ธฐ๋Šฅ์—์„œ๋„ QuadTree๊ฐ€ ์‚ฌ์šฉ๋จ

(๋…น์ƒ‰ ์‹ญ์ž๊ฐ€๊ฐ€ QuadTree ๊ตฌ์—ญ ๋‚˜๋ˆ ์ง„๊ฑฐ Debug)

์˜ˆ์ „์— ์˜ฌ๋ ธ๋˜ ํฌ์ŠคํŒ… - https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=98708



๋‹ค์‹œ ์ •๋ฆฌํ•˜์ž๋ฉด ๋ฌผ๋ฆฌ์—”์ง„์—์„œ ์–˜๊ธฐํ•˜๋Š” BroadPhase๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1. ํƒ์ƒ‰์— ์šฉ์ดํ•˜๋„๋ก ์œ„์น˜ ๋ฐ Shape์˜ ์ž๋ฃŒ๊ตฌ์กฐํ™”(QuadTree)

2. Shape๊ณ„์‚ฐ AABB๋กœ ๋‹จ์ˆœํ™”


๊ทธ๋ฆฌ๊ณ  ์œ„์— ์„ค๋ช…ํ–ˆ๋˜ AABBvsAABB, CirclevsCircle, AABBvsCircle๋กœ ์‹ค์ œ๋กœ ๊ฒน์น˜๋Š”์ง€ ์ฒดํฌ๋ฅผ ๋ฌผ๋ฆฌ์—”์ง„์—์„  NarrowPhase๋ผ๊ณ  ํ•œ๋‹ค.


์‹ค์ œ๋กœ LeoECS๋ฅผ ์“ฐ๋ฉด์„œ ์ •๋ง ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.


๋‹ค์Œ์— ๊ธฐํšŒ๊ฐ€ ์žˆ์œผ๋ฉด, ํ˜„์žฌ LeoECS์—์„œ ์–ด๋–ป๊ฒŒ


๋ฌผ์ฒด๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ธ์ง€

๋ฌผ์ฒด๋ฅผ ์ด๋™์‹œํ‚ค๋Š” ๊ฒƒ์€ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ๋  ์˜ˆ์ •์ด๋‹ค