๋ชฉ์ 

: ๊ฐ„๋‹จํžˆ ์œ ๋‹›์ด ๋™์  ์žฅ์• ๋ฌผ์„ ํšŒํ”ผํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์—ˆ์Œ.

๋”ฑํžˆ ํŒจ์ŠคํŒŒ์ธ๋”ฉ์ด ํ•„์š”ํ•œ ์ •๋„๋Š” ์•„๋‹ˆ๋ผ์„œ, ๋„ค๋น„๋ฉ”์‰ฌ ๋ง๊ณ  ๊ทธ๋ƒฅ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ–ˆ์Œ.


์ฐพ์•„๋ณด๋‹ˆ boids ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์“ฐ์ด๋Š”๋“ฏ.


boids ์•Œ๊ณ ๋ฆฌ์ฆ˜(flocking ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž‘ ๋™์˜์–ด)์ด ๋ญ”์ง€ ๊ถ๊ธˆํ•˜๋ฉด ๋‚˜๋ณด๋‹ค ๋˜‘๋˜‘ํ•˜๊ณ  ์„ค๋ช… ์ž˜ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์“ด ๊ธ€ ๊ฐœ๋งŽ์œผ๋‹ˆ ํ•œ ๋ฒˆ ๋ณด๊ธธ ์ถ”์ฒœํ•จ.


๋Œ€์ถฉ 3์ค„๋กœ ์„ค๋ช…ํ•˜์ž๋ฉด

1. ๊ฐ ๊ฐœ์ฒด(boid๋ผ๊ณ  ํ•จ)๊ฐ€ ์ฃผ๋ณ€์˜ ๋‹ค๋ฅธ ๊ฐœ์ฒด๋ฅผ ํŒŒ์•…ํ•ด์„œ

2. cohesion(๋“ค๋Ÿฌ๋ถ™์œผ๋ ค๊ณ  ํ•˜๋Š” ์„ฑ์งˆ), separation(๋–จ์–ด์ง€๋ ค๊ณ  ํ•˜๋Š” ์„ฑ์งˆ), alignment(๊ฐ™์€ ๋ฐฉํ–ฅ์„ ํ–ฅํ•˜๋ ค๊ณ  ํ•˜๋Š” ์„ฑ์งˆ) ์„ธ ๊ฐ€์ง€ ์„ฑ์งˆ๋Œ€๋กœ ์›€์ง์ด๋ฉด์„œ

3. ๋งˆ์น˜ ์ƒˆ ๋ฌด๋ฆฌ(flock) ์ฒ˜๋Ÿผ ์›€์ง์ด๋Š” ๊ฑธ ๊ตฌํ˜„ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜


ํ•ด์„œ ๋Œ€์ถฉ ์ดํ•ดํ•˜๊ณ  ์ž„์˜๋กœ ๊ตฌํ˜„ํ•ด๋ดค์Œ.


1ํŠธ

์ผ๋‹จ ๋˜๊ธด ํ•œ๋‹ค. ๊ฒฝ๋กœ๊ฐ€ ์ข€ ๋ณ‘์‹ ๊ฐ™๊ธด ํ•˜์ง€๋งŒ.

๊ฑ (transform.position - obstacle.position) + (target.position - transform.position) ๋ฐฉํ–ฅ๋Œ€๋กœ ํšŒ์ „ํ•˜๊ณ  ์ด๋™ํ•˜๊ฒŒ ํ–ˆ์Œ.

์ถ”๊ฐ€๋กœ, separation ํž˜์€ ๊ฑฐ๋ฆฌ๊ฐ€ ๊ฐ€๊นŒ์›Œ์งˆ์ˆ˜๋ก ๊ฐ•ํ•ด์ง„๋‹ค.


ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๋นก๋Œ€๊ฐ€๋ฆฌ๋„ ํ•  ์ˆ˜ ์žˆ๋Š” ์•„์ด๋””์–ด๋กœ๋Š” ์—ญ์‹œ๋‚˜ ๋ ๋ฆฌ๊ฐ€ ์—†๋‹ค.

์ธ์ƒ์€ ํšŒ์ „๋ชฉ๋งˆ ๋งˆ๋ƒฅ ๊ณ„์† ๋ˆ๋‹ค.


๋‹จ์ˆœํžˆ ์žฅ์• ๋ฌผ๊ณผ์˜ ์นด์šดํ„ฐ ๋ฒกํ„ฐ์˜ ํ•ฉ์œผ๋กœ๋งŒ ๊ณ„์‚ฐํ•˜๋ฉด, separation์ด cohesion๋ณด๋‹ค ์ปค์ง€๋ฉด ๋Œ์•„๊ฐ€๊ณ , ์ค„์–ด๋“ค๋ฉด ๋‹ค์‹œ ์•ž์œผ๋กœ ๊ฐ€๊ธฐ๋งŒ ๋ฐ˜๋ณตํ•˜๊ฒŒ ๋œ๋‹ค.




2ํŠธ

๊ทธ๋ž˜์„œ ๋ฐœ์ƒ์„ ๋ฐ”๊ฟ”๋ดค๋‹ค.

์–ด์ฐจํ”ผ ํšŒํ”ผ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค๋ฉด, ๊ฑ ์นด์šดํ„ฐ ๋ฒกํ„ฐ์˜ ํ•ฉ์˜ ์ˆ˜์ง๋ฒกํ„ฐ๋ฅผ ์“ฐ๋ฉด ๋˜๋Š” ๊ฑฐ ์•„๋‹Œ๊ฐ€?


39b8dd36abc236a14e81d2b628f1756a3834c0


๋Œ€์ถฉ ์ด๋ ‡๊ฒŒ.

๋นจ๊ฐ„ ๊ฒŒ ์นด์šดํ„ฐ ๋ฒกํ„ฐ, ๋…น์ƒ‰์ด ๊ทธ๊ฒƒ์˜ ์ˆ˜์ง๋ฒกํ„ฐ.

์ฃผํ™ฉ์ƒ‰์ด ํƒ€๊ฒŸ์„ ํ–ฅํ•ด ์ด๋™ํ•˜๋Š” ๋ฒกํ„ฐ.ย 

ํŒŒ๋ž€์ƒ‰์ด ์ตœ์ข…์ ์ธ ๋ฐฉํ–ฅ ๋ฒกํ„ฐ = ๋…น์ƒ‰ + ์ฃผํ™ฉ์ƒ‰


๊ทธ๋ž˜์„œ, ์ผ๋‹จ ๋˜๊ธด ๋๋‹ค. 1ํŠธ๋ณด๋‹ค ๊ฒฝ๋กœ๋„ ๊ดœ์ฐฎ์•„๋ณด์ธ๋‹ค.



ํ•˜์ง€๋งŒ ์ด๊ฒƒ๋„ ๋”ฑํžˆ ๊ณ ๋ฏผํ•˜๊ณ  ํ•œ ์ƒ๊ฐ์ด ์•„๋‹ˆ๋ผ ์—ญ์‹œ ํ•˜์ž๊ฐ€ ์žˆ์—ˆ๋‹ค.


๊ทผ๋ฐ ๋ญ์•ผ, ์™œ ๋™์˜์ƒ ์„ธ ๊ฐœ ๋ฐ–์— ์•ˆ ์˜ฌ๋ผ๊ฐ?

๋‚˜๋จธ์ง„ 2ํŽธ์—์„œ ๊ณ„์†ํ•จ.


https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=129977&page=1

์‘์• ์ผ์ง€ - ์žฅ์• ๋ฌผ ํšŒํ”ผ(2) - ์ธ๋”” ๊ฒŒ์ž„ ๊ฐœ๋ฐœ ๋งˆ์ด๋„ˆ ๊ฐค๋Ÿฌ๋ฆฌ

https://gall.dcinside.com/mgallery/board/view/?id=game_dev&no=129976&page=1 ์‘์• ์ผ์ง€ - ์žฅ์• ๋ฌผ ํšŒํ”ผ(1) - ์ธ๋”” ๊ฒŒ์ž„

gall.dcinside.com





์ฐธ๊ณ ์ž๋ฃŒ



https://www.jdxdev.com/blog/2021/07/06/rts-pathfinding-2-dynamic-navmesh-with-constrained-delaunay-triangles/

: steering system in game

http://dogfeet.github.io/articles/2012/flocking-algorithm.html : ํ”Œ๋กœํ‚น ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๋ช…

https://codeheir.com/2021/03/27/the-flocking-algorithm/ : ๋น„์Šทํ•œ ์„ค๋ช…

https://youtu.be/ngh9GSZj0HY" style="font-size:10pt;">https://youtu.be/ngh9GSZj0HY : Boids ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ ์˜ˆ์‹œ

https://www.jdxdev.com/blog/2021/03/19/boids-for-rts/ : ์„ค๋ช…

https://www.jdxdev.com/blog/2021/07/06/rts-pathfinding-2-dynamic-navmesh-with-constrained-delaunay-triangles/


ํ•˜์ดํผ๋งํฌ๊ฐ€ ๋˜๋Š” ๊ฑด์ง€ ์•ˆ๋˜๋Š” ๊ฑด์ง€ ๋ชจ๋ฅด๊ฒ ๋„ค.

๊ถ๊ธˆํ•˜๋ฉด ๊ฑ ๊ธ์–ด์„œ ๋ณด์…ˆ.