ํ ๋ฉฐ์น ์งธ ๋จธ๋ฆฌ ์ธ๋งค๊ณ ํ์ด๋ณด๋ ค๊ณ ์ด๊ฒ์ ๊ฒ ํด๋ดค๋๋ฐ ๋์ ํ ์ ์ง์์ผ๋ก๋ ์๋์ ๊ธ ์ฌ๋ ค๋ด ๋๋ค
์ ๋ ํ๋๊ฐ ๋ชจ๋ ์ ๋์ด ์๋ ์ ๋ HashSet์ ํ์ด๋ณด๋ฉด์ ๊ฐ์ฅ ๊ฐ๊น์ด ์ ๋์ ์ฐพ์๋ด๋ ํจ์ FindEnemy()๊ฐ
ํธ์ถ ํ๋ฒ๋น 0.5ms๊ฐ ์์๋๋๋ฐ ๋์ฐํ๊ฒ๋ ์ ๋์ด ํ 200~300 ๊ฐ๊น์ด ๋๋ฉด ์ด๊ฒ ๋ญ์ณ์ 200ms ์ ๋๊ฐ ์์๋ฉ๋๋ค.
ํธ์ถ์ 0.1์ด ๊ฐ๊ฒฉ์ผ๋ก ๊ณ์ํด์ ํธ์ถ๋ฉ๋๋ค
๋นจ๋ฆฌ ์ฐพ๋ ๋ฐฉ๋ฒ์ด๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์๋ ์ ๋์ ์ฐพ๋ ๋ฐฉ๋ฒ ์๋์?
์ด๊ฑด ์ FindEnemy()๋ฅผ ์ฌ์ฉํ์ง ์์์๋์ธ๋ฐ ์ด๋๋ FixedUpdate.Physics2DFixedUpdate์์ ๊ต์ฅํ ๋ง์ ๋ ์ ์ ๋ฐํฉ๋๋ค.
์ ๋๋ค์ ์ฃ๋ค Rigidbody2D์ Body Type์ Dynamic์ด๊ณ ์.
๋ฌผ๋ฆฌ ์ชฝ๋ ์ด๋ป๊ฒ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋์ง ๊ถ๊ธํฉ๋๋ค.
์ ๋ ํ์ ์ฝ๋์ ๋๋ค
Vector2.Distance(unit.rb.position, rb.position)์ย
(unit.rb.position - rb.position).sqrMagnitude๋ก ๊ฐ์ ํด๋ดค์ต๋๋ค
ํฐ ์ฐจ์ด๋ ๋ณด๊ธฐ ์ด๋ ค์ ์ต๋๋ค.
ํํด๊ฑธ๊ณ ์ถ์๊ฒ ํ๋๋์ด ์๋์ง๋ง ๋ด์คํ ๋๊น ์ผ๋จ ์ฝ๋๋ฅผ ๊น๋ด
์ ๋ ํ์ ์ฝ๋ ์ฌ๋ ธ์ต๋๋ค
dots๋ฅผ ๋ฐฐ์ฐ๋๋ก ํฉ์๋ค!
๋์ถฉ ์์๋๋ก์ธ๋ฐ ์ผ๋จ Vector2.Distance๋ ์ ๊ณฑ๊ทผ์ ์ฐ๊ธฐ๋๋ฌธ์ ์กด๋๊ฒ ๋๋ฆผ. (unit.rb.position-rb.position).sqrMagnitude ์ผ๋ก ๋์ฒดํด๋ด
๊ทธ๋ฆฌ๊ณ ๋งํ๋ ๋๋ฆฌ๋๊น ์ํธ๊น์ง ์ฐ์ง๋ง๊ณ ์ง์ ๋ฃจํ ๋๋ ค์ ๋น๊ตํด๊ฐ๋ฉด์ ์ ์ผ ๊ฐ๊น์ด๊ฒ๋ง ์ ์ฅํ๋ ์์ผ๋ก ๋ฐ๊พธ๋๋ก
๊ทธ๋ฆฌ๊ณ ์ฒ์๋ถํฐ ์ ๊ณผ ์ ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฐ๋ก ๊ฐ๊ณ ์์ผ๋ฉด ๋ฃจํ ์์์ ์ผ์ผํ ๊ตฌ๋ถํ ํ์๊ฐ ์์ด์ง
์ ๊ณผ ์ ๋ ๋ฆฌ์คํธ๋ฅผ ๋ฐ๋ก ๋ฐ๋ก ๋๋๊ณ ์ง์ ๋ฃจํ ๋๋ฆฌ๊ณ ๊ฐ๊น์ด ๊ฒ๋ง ์ ์ฅํ๋๋ FindEnemy() ํจ์๊ฐ ํ๋๋น 0.2ms ์ ๋๋ก ๊ฐ์ํ์ต๋๋ค.
์ ๋ํด๋์ค nearestunit=null; float nearestdistance=float.MaxValue; float distance; foreach(var unit in unitlist) { distance=(unit.rb.position-rb.position).sqrMagnitude; if(distance<nearestdistance) { nearestdistance=distance; nearestunit=unit; } } ์ด๋ฐ์์ผ๋ก ํ๊ฑฐ?
๋ค, ์์ foreach๋ฌธ ๋๋ ค๊ฐ๋ฉด์ ์ ์ผ ์์ ๋๋ง ๋จ๋๋ก ํ์ด์.
Physics.OverlapSphereNonAlloc ์ด๊ฑฐ๋ ๋น๊ตํด๋ณด๊ณ ์ถ๋ค
https://youtu.be/6rDlfYC4HxM
๊ฐ์ฌํฉ๋๋ค. ์ฐธ๊ณ ํด๋ณผ๊ฒ์
๊ต์ฅํ ๋นจ๋ผ์ก์ต๋๋ค. ์ฌ์ฉ ๋ฐฉ๋ฒ์ด ๋ค์ ์ด๋ ต๊ธด ํ์ง๋ง.. ์๋ฌดํผ ๊ฐ์ฌํฉ๋๋ค.
๋๋ ๋ด์ ์ด๋ฐ ๊ฒ ๋ง๋ค๊ณ ์ถ์ด์ ์๊ฐํด ๋๋๊ฑด๋ฐ ์ด๋ฌ๋ ๊ฒ ๋ง๋์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค ์ฌ์ค ์ ์ ๋๋ค์ด ์ ๋ง ๋น ๋ฆฟ๋น ๋ฆฟํ๊ฒ ๋งค ํ๋ ์๋ง๋ค ์ ๊ฑธ ์ํํ ํ์๋ ์์์ ๊ทธ๋ฌ๋ ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์ด ๋งค ํ๋ ์๋ง๋ค 6๊ฐ์ฉ ๊ฒ์ฌํ๋ ๊ฑฐ์ ๊ทธ๋ผ 60ํ๋ ์์ด ์ง๋๋ฉด 360๊ฐ๊ฐ ์ฒ๋ฆฌ๋๋ ๊ฑฐ์์ ๋ชจ๋ ์ ๋์ด 1์ด๋ง๋ค ํ๋ฒ์ฉ์ ๊ฒ์ฌ๊ฐ ๊ฐ๋ฅํ๊ฒ ๋๋ ๊ฑฐ... ๋ฆฌ์คํธ ๊ธธ์ด์ ๋ฐ๋ผ ๋งค ํ๋ ์ ๊ฒ์ฌํ๋ ์ ๋ ๊ฐฏ์๋ฅผ ์กฐ์ ํ ์๋ ์๊ณ ...
์ด๋ ๊ฒ ๋ง๋ค๋ฉด ์ ๋์ด ์ต๋ 1์ด ๋ฆ๊ฒ ๋ฐ์ํ๋ ๊ฑด๋ฐ ๋ญ ์ด ์ ๋์ผ ํฌ๊ฒ ์ด์ํด ๋ณด์ด์ง๋ ์์ ๊ฒ ๊ฐ์์ ํ๋ฒ ์๊ฐํด๋ดค์์
์ด๊ฒ๋ ํ๋ฒ ์จ๋ณผ๊ฒ์ ๊ฐ์ฌํฉ๋๋ค
๊ทธ๋ฆฌ๊ณ ๋งค๋ฒ ๋ชจ๋ ์ ์ ๊ฒ์ํ ํ์๊ฐ ์๋? ์๊ธฐ ์ฃผ๋ณ ๋ฐ๊ฒฝ ์ผ๋ง ์ด์๋ง ๊ฒ์ํ๋ฉด ์๋จ? ๋ firstordefault๋ผ๋ ๊ฑฐ ์ฒจ ๋ดค๋๋ฐ ์ ๊ฑฐ ์๋๊ฐ ์ด๋ป๊ฒ ๋จ? ์ ๋ถ ๋ง๋๋ก ์ด๊ฑฐ๋ณด๋ค ๊ทธ๋ฅ overlapspherenonalloc๋ก ํน์ ๋ฐ๊ฒฝ๋ด ์ต๋ ๋ช๋ง๋ฆฌ๊น์ง๋ง ์ฐพ๋๊ฒ ๋ ๋น ๋ฅด์ง ์๋? ์๋ง ์ด๋ฐ ์์์ ์ธ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒ๋ ์ ๊ธฐํ ์๊ณ ๋ฆฌ์ฆ๋ ์์ ๊ฒ ๊ฐ์ง๋ง..ใ
์ด๊ฒ๋ ๋ง๋๋ง
๊ทผ๋ฐ ์๊ธฐ ์ฃผ๋ณ ์ผ๋ง ์์ ๋ค์ด์๋์ง๋ฅผ ์๋ ค๋ฉด ์ด์ฐจํผ ์ ๋ ํ๋ํ๋ ์ค์ฌ์ผ๋ก ๊ฑฐ๋ฆฌ๋น๊ต๋ฅผ ํ๊ธด ํด์ผํ์์. ์๋๋ฉด ์ฟผ๋ํธ๋ฆฌ๊ฐ์๊ฑฐ ๋ณ๋๋ก ์จ์ผํ๋๋ฐ
๋ ํ์ ์ด๋ผ ํธ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ๊ฐ์๊ฑด ์๋ ๋ชป๋์...ใ ใ ์์ ์ ๋ถ ์ ํ๋ธ ๋ณด๋๊น k-dํธ๋ฆฌ๋ผ๊ณ ์ฝ๋๊น์ง ๋ค ๊ณต๊ฐํ๋ค ์ข์๋ณด์ธ๋ค
ํ ์ ๊ฑฐ ์ด์ ๋ดค๋ค. ๊ด์ฐฎ์๋ณด์ธ๋ค
๋ฉํฐ์ค๋ ๋, ์ก์์คํ ์ฐธ๊ณ ํด๋ด