์ ๋ํฐ์์ Rigidbody์ Collider๋ฅผ ์ด์ฉํ์ฌ ์์ง์์ ๊ตฌํํ์๋๋ถ๋ค์ด ๋ง์๊ฒ๋๋ค~
๊ทธ๋ฐ๋ฐ ๊ตฌํํ๋ค ๋ณด๋ฉด ๋ญ๊ฐ์กฐ๊ธ ๋น์์ฐ์ค๋ฌ์ด ๊ฒฝ์ฐ๊ฐ ๋ง์ด ์์ผ์คํ ๋ฐ์.
์ฌ๋ฌ ์ฌ๋ก๋ฅผ ๋ค์ด ์กฐ๊ธ ์์ฐ์ค๋ฌ์ด ์์ง์์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. ์ ํ๊ตฌํ
์ฌ์ค ์ ํ ์์ฒด ๊ตฌํ์ ๊ทธ๋ค์ง ์ด๋ ต์ง ์์ต๋๋ค. Rigidbody์ y๋ฐฉํฅ์ผ๋ก ์ผ์ ํ๋ง ๊ฐํ๋ฉด ๋ฉ๋๋ค.
๋ค๋ง, ๋ฌธ์ ๋ '์ ํ๊ฐ ๊ฐ๋ฅ' ํ ์ฌ๋ถ๋ฅผ ํ๋จํ๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ฆ, ์ ํ๋ฅผ ํ๋ ค๋ฉด ์ค๋ธ์ ํธ๊ฐ ๋ฐ๋ฅ์ ์์ด์ผ ํ๋ค๋ ๊ฒ์ด์ง์.
์ด๋ '๋ฐ๋ฅ'์ ์๋์ง ์ฌ๋ถ๋ฅผ ํ๋จํ๋ ๊ฐ์ฅ ๋์ค์ ์ธ ๋ฐฉ๋ฒ์ Raycast ์ ๋๋ค.
Raycast๋ ์ผ์ ํ ์์น์์ ์ผ์ ํ ๋ฐฉํฅ์ผ๋ก ์ผ์ ํ ๊ฑฐ๋ฆฌ์ ๋ณด์ด์ง์๋ ๊ด์ ์ ๋ฐ์ฌํ์ฌ ๋ถ๋ซํ๋ Collider๊ฐ ์๋์ง ํ๋จํ๋ ํจ์ ์ ๋๋ค.
(Raycast ๊ฐ๋ ๋)
์ฐ๋ฆฌ๋ ์บ๋ฆญํฐ์ ์์น์์, ์๋ ๋ฐฉํฅ์ผ๋ก, ์งง์ ๊ฑฐ๋ฆฌ์ Raycast๋ฅผ ๋ฐ์ฌํ ๊ฒ์ ๋๋ค.
๋ค๋ง, Raycast๋ ์ฐ์ฐ์ด ๋ง์ ํจ์์ด๋ฏ๋ก ๋งคํ๋ ์๋ง๋ค ํธ์ถํ๊ธฐ์๋ ๋ถ๋ด์ด ์๋ ์์ ์ ๋๋ค.
๊ทธ๋์ ํ์ฌ y๋ฐฉํฅ ์๋์ ๋ฐ๋ผ์ Raycast๋ฅผ ํธ์ถํฉ๋๋ค.
์ฝ๋๋ ์์ ๊ฐ์ต๋๋ค.
Physics.Raycast( ์์์์น, ๋ฐฉํฅ, RaycastHit ๊ตฌ์กฐ์ฒด ๋ ํผ๋ฐ์ค, ๊ฑฐ๋ฆฌ, ๋ ์ด์ด๋ง์คํฌ );
์์์์น => ๋ฐ์ฌ๋ Ray์ ์์์ ์ ๋๋ค. ์ ๋ ํ๋ ์ด์ด์ ๋ฐ๋ฐ์์ ๋ฐ์ฌํ๋๋ก ํ์ต๋๋ค.
๋ฐ์ฌ๋ฐฉํฅ => Vector3.down, (0f,-1f,0f)
๊ฑฐ๋ฆฌย ย ย => ๊ธธ๊ฒ ๋ฐ์ฌํ๋ฉด ๊ณต์ค์์๋ ๊ทธ๋ผ์ด๋ ์ฒดํฌ๊ฐ ๋๋ฏ๋ก ์งง๊ฒ 1f์ ๋๋ง ๋ฐ์ฌํฉ๋๋ค.
๋ ์ด์ด๋ง์คํฌ => ์ฝ๋ผ์ด๋์ GameObject์ค์ ํน์ ๋ ์ด์ด์ ์ํ ๊ทธ๋ฃน๋ง Raycast๋ฅผ ํ์ฉํ๋๋ก ํ ์ ์์ต๋๋ค.ย
public LayerMask Mask; ์ ์ธํด๋์๊ณ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.
Rigidbody์ velocity ์์ฑ์ ํ์ฌ Rigidbody์ ์๋๋ฅผ ๋ํ๋ ๋๋ค.ย
Raycast ๊ฒฐ๊ณผ ๋ถ๋ซํ๋ ์ฝ๋ผ์ด๋๊ฐ ์๋ค๋ฉด, ๊ทธ์ ๋ณด๊ฐ RaycastHit ๊ตฌ์กฐ์ฒด์ ๋ด๊ฒจ ๋ค์ด์ต๋๋ค.
์ ํ๋ ๊ฐ๋จํฉ๋๋ค. ๊ทธ๋ฅ ์๋ฐฉํฅ์ผ๋ก ์ฌ๋ ค์ฃผ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ( ์ ๋ ๋ฌ๋ฆด๋ ์กฐ๊ธ๋ ๋์ด ๋ฐ๋๋ก ํ๊ธฐ ๋๋ฌธ์ Sprint๋ผ๋ float ๋ณ์๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.)
Raycast์ ๋จ์ ์ด ์๋ค๋ฉด ์ด๋ฐ๊ฒฝ์ฐ ์ ๋๋ค.
์ด๊ฒฝ์ฐ์๋ IsGround ์ฒดํฌ๊ฐ ๊ฐ๋ฅํ์ง๋ง
์ด๋ฐ๊ฒฝ์ฐ์๋ ๊ทธ๋ผ์ด๋ ์ฒดํฌ๊ฐ ๋์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด๋ฐ๊ฒฝ์ฐ ์ค๋ธ์ ํธ์ ํฌ๊ธฐ์ ๋ฐ๋ผ์ Raycast๋ฅผ ์ฌ๋ฌ์์น์์ ๋ฐ์ฌํ๋ ์ ๋ต๋ ํ์ํ ์ ์์ต๋๋ค.
2. ๊ฒฝ์ฌ๊ฐ๋์ ๋ฐ๋ฅธ ์์ง์ ๊ตฌํ
Rigidbody๋ฅผ ํตํด ์์ง์ผ๊ฒฝ์ฐ ๋จ์ํ MovePosition๊ฐ์ Rigidbody ํจ์๋, Transform.Translate๋ฑ์ ์ด๋๋ง์ผ๋ก๋
์์ ์ฅ์ ๋ฌผ์ด ๊ฒฝ์ฌ๊ฐ์๋ฐ๋ผ ์์ง์์ ์ ํ์ฃผ๊ธฐ์๋ ์ฌ์ค ํ๋ญ๋๋ค.ย
๊ฒฝ์ฌ๊ฐ๋์ ๋ฐ๋ผ ์บ๋ฆญํฐ์ ์๋๋ฅผ ์ ์ดํ๋ย ๋ฐฉ๋ฒ์ ์๊ฐ ํฉ๋๋ค.
์ฅ์ ๋ฌผ์ ์ค๋นํ์ต๋๋ค.
์ผ๋จ ์บ๋ฆญํฐ์ ์๋ฐฉํฅ์ ์ฅ์ ๋ฌผ์ ํ๋จํ๊ธฐ ์ํด์ ์ด๋ฒ์๋ Raycast๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฌ๊ธฐ๊น์ง๋ Ground Check์ ๋ณ๋ฐ ๋ค๋ฅผ๋ฐ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ ์ด์ฉํ ๊ฒ์ RaycastHit ๊ตฌ์กฐ์ฒด ์ ๋ณด์ ๋๋ค.
๋ง์ ์ ๋ณด๊ฐ ์๋๋ฐ, ์ฌ๊ธฐ์ ํ์ํ๋ด์ฉ์ point์ normal ์ ๋๋ค.
point๋ ray๊ฐ ๋ถ๋ซํ ์ง์ , normal์ ๋ถ๋ซํ ๋ฉด์ ๋ฒ์ ๋ฒกํฐ(์์ง)ย ์ ๋๋ค.
์ฝ๋๋ฅผ ์ถ๊ฐํ์ฌ ํ๋ฒ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
์ด๋ก์์ ๋ฒ์ ๋ฒกํฐ๊ฐ ๋ณด์ด์๋์?
์, ์ด ๋ฒ์ ๋ฒกํฐ๋ ์ฝ๋ผ์ด๋์ ๋ฉด์ด ์ด๋ฃจ๋ ์์ง๋ฒกํฐ ์
๋๋ค. ๋ฐ๋ผ์ ์ด๋ฐฉํฅ์ ์ด์ฉํ์ฌ ๋ฑํ ๊ฐ๋๋ฅผ ์์๋ผ์ ์์ต๋๋ค.
์ ๊ทธ๋ผ ๋ฑํ๊ฐ๋๋ฅผ ์์์ผ ๊ฒ ์ฃ ? ์ด๋ ๋ฑํ๊ฐ๋๋ ๋์น์ฑ์ ๋ถ๋ค๋ ์๊ฒ ์ง๋ง!
๋ฒกํฐ์ '๋ด์ '์ ์ฌ์ฉํ์ฌ ๊ฐ๋๋ฅผ ์์๋ผ์ ์์ต๋๋ค.
๋ด์ ์ ๋ ๋ฒกํฐ๊ฐ ์ด๋ฃจ๋ ๊ฐ๋๋ฅผ ์๊ณ ์ถ์๋! ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
๋ฐฑํฐ์ ๋ด์ ์ ๋ฐฑํฐ A,B์ ํฌ๊ธฐ์ cos(โ)๋ฅผ ๊ณฑํ ๊ฐ์ ๋๋ค.ย
์ด๋ ๋ ๋ฒกํฐ๊ฐ ๋จ์ ๋ฒกํฐ๋ผ๋ฉด ํฌ๊ธฐ๊ฐ 1์ด๋ฏ๋ก, ์๋ต๊ฐ๋ฅํ๋ฉฐ ๋ฐ๋ผ์ cos(โ)๋ง ๋จ์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๊ตฌํด์ผํ ๊ฒ์
ํ๋ ์ด์ด์ ์๋ฐฉํฅ(๋นจ๊ฐ์)์ ๋ฐ๋๋ฐฉํฅ(ํ๋์)๊ณผ, ๋ฒ์ ๋ฒกํฐ์ฌ์ด์ ๊ฐ๋๋ฅผ ๊ตฌํ๋ฉด ๋ฉ๋๋ค.
90๋ - ๋ด์ ๊ฒฐ๊ณผ = ๊ฒฝ์ฌ๊ฐ๋๊ฐ ๋ฉ๋๋ค.
์ค์ ๊ฒฝ์ฌ๊ฐ๋๋ฅผ ๋์ผ๋ก ํ์ธํ๊ธฐ ์ํด์ ๋ด์ ๊ฒฐ๊ณผ์ Acos์ ์ํํ ๊ฒ์ ๋๋ค. ( cos์ ์ญํจ์ )
๊ฒฐ๊ณผ๊ฐ Cos( โ ) ์ด๋ฏ๋ก, ์ฝ๊ฒ ๋ฑํ๊ฐ๋์ ๋ฐ๋ฅธ ์๋๋ฅผ ํ๋จํ ์ ์์ต๋๋ค.
cos(0)ย = 1
cos(30) = ๋ฃจํธ(3)/2
cos(45) = ๋ฃจํธ(2)/2
cos(60) = 1/2
cos(90) = 0
๋ฑํ๊ฐ๋๊ฐ 90๋๋ฉด ๋น์ฐํ ์์ผ๋ก ๊ฐ์ง ๋ชปํ๊ฒ ์ฃ ?
์ค์ ์์ง์ด๋ ์ฝ๋๋ ์ด๋ ์ต๋๋ค.
๋ถ๋ซํ์ ์ ๋ฒ์ ๋ฒกํฐ์ ๋ด์ ์ ์ด์ฉํ์ฌ ๊ฐ๋๋ฅผ ๊ตฌํ๊ณ , ๊ทธ์๋ฐ๋ฅธ ํ๋ ์ด์ด ์๋๋ฅผ ์ ํด๋ณด์์ต๋๋ค.
Hit.gameObject.rotation ์ ํ์ฉํ์ฌ ๊ตฌํํ์ค๋ถ๋ค๋ ์์ผ์๊ฒ ์ง๋ง, ๊ทธ๋ ๊ฒํ๋ฉด Terrain๊ฐ์ ์งํ์ ๋ฑํ๊ฐ๋๋ ์ธก์ ํ ์ ์์ต๋๋ค.
(Terrain ์ค๋ธ์ ํธ์ Rotation์ Euler๋ย ํญ์ 0,0,0 ์ผ ํ ๋๊น์.. )
์์ง ๊ฒฝ์ฌ๋ฉด ๊ด๋ จ๋ ํ์ ์ ์ํด์ ์ ํจ์ ์๋ ๊ฒ ๋ชฐ๋๋๋ฐ ํ์ ๊ด๋ จ ํ์ ํ๋ฉด ๊ธฐ์ต์ ๋จ์ ๋ง - dc App
๊ฒฝ์ฌ ๊ฑท๋ ๋ฒ ๊ถ๊ธํด์ ์ฐพ๊ณ ์์๋๋ฐ ๊ตฟ
์ฐ์ ์ด ๊ฐค์ ์ด์ ๊ฐ์ข๊ธ๋ ์ฌ๋ผ์ค๋ค์ผใทใท๋ฉ์ ธ์ - dc App
๋๋์ถ
๊ตฟ - dc App
๊ฐ๋ฐ ์ค์ ์ค์ ๋ก ์ด๋ ค์์ ๊ฒช์๋งํ ๋ถ๋ถ์ ๋ํด ์ถฉ์คํ ๊ฐ๋ฅด์ณ์ฃผ๊ณ ์๋ ๊ธ์ด๊ตฐ์. ์ด๋ฏธ ๊ฐ๋ ๊ธ ๊ฐ ์์ง๋ง ์ถ์ฒ ๊ฐ๋์