๐บ ๋ฒกํฐ์ ํ๋ ฌ๋ก ์ดํดํ๋ ์บ๋ฆญํฐ ์ด๋ – ๊ฒ์ ๊ฐ๋ฐ ์ํ ์์ ์ ๋ฆฌ
๊ฒ์์์ ์บ๋ฆญํฐ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์์ง์ด๋ ๊ฒ์ฒ๋ผ ๋ณด์ฌ๋, ์ค์ ๋ก๋ **๋ฒกํฐ(Vector)์ ํ๋ ฌ(Matrix)**๋ผ๋ ์ํ ๊ฐ๋
์ด ๋ค์์ ์์ง์์ ๊ณ์ฐํ๋ค.
์ด๋ฒ ๊ธ์์๋ ๋ฒกํฐ์ ํ๋ ฌ์ ๊ธฐ๋ณธ ๊ฐ๋
๋ถํฐ, Unity์์ ์บ๋ฆญํฐ ์ด๋ ๊ตฌํ๊น์ง ์ฝ๊ฒ ํ์ด๋ณด๊ฒ ๋ค.
1. ๋ฒกํฐ(Vector)๋?
-
ํฌ๊ธฐ์ ๋ฐฉํฅ์ ๊ฐ์ง ๋ฐฉํฅ ๊ฐ
-
2D ๋ฒกํฐ:
(x, y)→ x์ถ ๋ฐฉํฅ, y์ถ ๋ฐฉํฅ -
3D ๋ฒกํฐ:
(x, y, z)→ 3์ฐจ์ ๊ณต๊ฐ
์์: ์บ๋ฆญํฐ ์ด๋
→ ๋ฒกํฐ๋ ๋ฐฉํฅ + ์๋ ๊ณ์ฐ์ ํต์ฌ
2. ๋ฒกํฐ ์ฐ์ฐ ๊ธฐ๋ณธ
-
๋ง์ : ๋ ๋ฒกํฐ์ ๋ฐฉํฅ๊ณผ ํฌ๊ธฐ ํฉ์ฐ
-
๋บ์ : ๋ชฉํ ์ง์ ๊ณผ ํ์ฌ ์์น ์ฐจ์ด → ์ด๋ ๋ฐฉํฅ
-
์ค์นผ๋ผ ๊ณฑ: ๋ฒกํฐ ํฌ๊ธฐ ์กฐ์ (์๋ ์กฐ์ )
-
์ ๊ทํ(Normalize): ํฌ๊ธฐ๋ฅผ 1๋ก ๋ง๋ค์ด ๋ฐฉํฅ๋ง ํ์ฉ
→ ๋ชฉํ ์ง์ ์ ํฅํด ์ผ์ ์๋๋ก ์ด๋
3. ํ๋ ฌ(Matrix)๋?
-
๋ฒกํฐ ๋ณํ์ ์ํ 2D/3D ์ํ ๊ตฌ์กฐ
-
ํ์ (Rotation), ์ด๋(Translation), ํ๋/์ถ์(Scale) ์ ์ฉ ๊ฐ๋ฅ
-
Unity ๋ด๋ถ์ ์ผ๋ก Transform์ ํ๋ ฌ ์ฐ์ฐ์ผ๋ก ์ฒ๋ฆฌ
์์: ํ์
→ Y์ถ ๊ธฐ์ค์ผ๋ก ๋งค ํ๋ ์ 90๋/sec ํ์
4. ๋ฒกํฐ + ํ๋ ฌ๋ก ์ด๋ ๊ตฌํ
-
์์น ์ด๋:
position += direction * speed * deltaTime -
ํ์ :
transform.rotation = Quaternion.Euler(...)→ ํ๋ ฌ/์ฟผํฐ๋์ธ ์ ์ฉ -
์ค์ผ์ผ:
transform.localScale = new Vector3(1, 1, 1)
์ฆ, ์บ๋ฆญํฐ ์ด๋์ **๋ฒกํฐ(๋ฐฉํฅ, ์๋) + ํ๋ ฌ(ํ์ , ๋ณํ)**์ ๊ฒฐํฉ์ผ๋ก ๋ง๋ค์ด์ง๋ค.
5. ๋ง๋ฌด๋ฆฌ
๋ฒกํฐ์ ํ๋ ฌ์ ์ดํดํ๋ฉด,
-
ํ๋ ์ด์ด, NPC, ์นด๋ฉ๋ผ ์์ง์์ ์ ํํ๊ณ ์์ธก ๊ฐ๋ฅํ๊ฒ ์ ์ด
-
์ ๋๋ฉ์ด์ , ํฌ์ฌ์ฒด, ์ด๋ ๊ฒฝ๋ก ๊ณ์ฐ ๋ฑ ๊ฒ์ ์ ๋ฐ์ ํต์ฌ ์ํ์ ์ดํด
๐ ๋ค์ ๊ธ์์๋ ์ค๋ ฅ, ํฌ๋ฌผ์ ์ด๋ ๊ณต์์ผ๋ก ์ ํ/ํฌ์ฌ์ฒด ๊ตฌํ์ ๋ค๋ค์ ๋ฌผ๋ฆฌ ๊ธฐ๋ฐ ์์ง์์ ๊ตฌํํด๋ณด๊ฒ ๋ค.
๋๊ธ
๋๊ธ ์ฐ๊ธฐ