๐ ์ค๋ธ์ ํธ ์ด๋ ๋ถ๋ถ
- ์ ๋ํฐ์์๋ ๋ ๊ฐ์ง์ ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํด์ ์ด๋ํ ์ ์๋ค. ์ฒซ๋ฒ์งธ๋ Transfrom ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์๊ณผ Rigidbody ์ปดํฌ๋ํธ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์
- ์ฅ์ : ์ง์ ์ ์ผ๋ก ์์น๋ฅผ ์ ์ดํ ์ ์์ด ๋งค์ฐ ๊ฐ๋จํ๊ณ , ์์ธก ๊ฐ๋ฅํ ์์ง์์ ๊ตฌํํ ์ ์๋ค. ์ฆ, ์ถฉ๋์ฒ๋ฆฌ๋ ์ค๋ ฅ ํจ๊ณผ๊ฐ ํ์ ์์ ๋ ์ ์ฉํ๋ค
- ๋จ์ : ๋ฌผ๋ฆฌ์ ๋ฐ์์ด ์๊ธฐ ๋๋ฌธ์, ๋ฌผ๋ฆฌ ๊ธฐ๋ฐ์ผ๋ก ์์ง์ด๋ ๊ฒ์์ ์์ฐ์ค๋ฌ์ด ๊ฐ๊ฐ์ด ๋จ์ด์ง๋ค. ์ถฉ๋, ์ค๋ ฅ ๋ฑ์ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค. ๋ํ, ๋๋ฌด ๋น ๋ฅด๊ฒ ์ด๋ํ๋ฉด ๋ฌผ๋ฆฌ ์ถฉ๋์ด ์ ๋๋ก ๋์ํ์ง ์๊ฑฐ๋ ์บ๋ฆญํฐ๊ฐ ๋ฒฝ์ ํต๊ณผํ ์ ์๋ค
- ์ถฉ๋, ์ค๋ ฅ ์ฒ๋ฆฌ, ๋ฌผ๋ฆฌ ๋ฐ์์ด ํ์ ์๋ ๊ฒฝ์ฐ, ๋จ์ํ๊ฒ ์ด๋๋ง์ ๊ตฌํํ๊ณ ์ถ์ ๋
- ์ ๋ฐํ ์์น ์ ์ด๊ฐ ํ์ํ ๋, ์ง์ ์ขํ๋ฅผ ์ค์ ํ๊ธฐ ๋๋ฌธ์ ์ธ๋ฐํ ์ ์ด๊ฐ ๊ฐ๋ฅํ๋ค
- ์นด๋ฉ๋ผ์ ์ด๋, UI์ ์์ ์ด๋ : ๋ฌผ๋ฆฌ์ ๋ฐ์์ด ํ์์๋ ์ค๋ธ์ ํธ๋ ui์ด๋์๋ transfrom์ด ์ ํฉํ๋ค.
โญ Rigidbody2D์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
- ์ฅ์ : ์ค๋ ฅ, ์ถฉ๋, ๋ง์ฐฐ, ๋ฐ๋ ๋ฑ ๋ฌผ๋ฆฌ ํจ๊ณผ๊ฐ ์๋์ผ๋ก ์ ์ฉ๋ฉ๋๋ค. ์์ฐ์ค๋ฌ์ด ์์ง์์ด ๊ฐ๋ฅํ๋ค.
- ๋จ์ : ๋ฌผ๋ฆฌ์ ์ธ ๋ฐ์ ๋๋ฌธ์ ์์ธกํ์ง ๋ชปํ ์์ง์์ด ๋ฐ์ํ ์ ์๊ณ , ์ด๋์ ์ธ๋ฐํ๊ฒ ์ ์ดํ๊ธฐ ์ด๋ ค์ธ ์ ์๋ค.
โญ when? , how ?
- ์ค๋ ฅ ์ ์ฉ์ด ํ์ํ ๋, ex) ์บ๋ฆญํฐ๊ฐ ์ ํํ ๋ ๊ฒ์์์ ์ค๋ ฅ ์ํฅ์ ๋ฐ์์ผ ํจ
rigidbody2D.AddForce(new Vector2(0, jumpForce), ForceMode2D.Impulse);
1. ์ถฉ๋ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋
- ex) ํ๋ ์ด์ด๊ฐ ๋ฒฝ์ด๋ ๋ค๋ฅธ ์ค๋ธ์ ํธ์ ์ถฉ๋ํ ๋ ๋ฐ์ํ๊ฑฐ๋ ๋ฉ์ถ๊ฒ ํ๋ ค๋ฉด ์ถฉ๋์ฒด(Collider)๊ฐ ํ์ํ๋ค. ๋ฌผ๋ฆฌ ์์ง์ด ์ถฉ๋์ ์๋์ผ๋ก ์ฒ๋ฆฌํด ์ฃผ๊ธฐ ๋๋ฌธ์ ๋ฒฝ์ ๋ถ๋ชํ ๋ ์์ฐ์ค๋ฝ๊ฒ ๋ฉ์ถ๊ฑฐ๋, ๋ค๋ฅธ ๋ฌผ์ฒด์์ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ๋ค.
2. ์์ฐ์ค๋ฌ์ด ๊ฐ์ ๋ฐ ๊ฐ์์ ์ํ ๋
- Rigidbody๋ ๊ฐ์๋์ ๊ฐ์๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฌผ์ฒด์ ์์ง์์ ์ฒ๋ฆฌํ๋ค. ์ด๋ ๋ง์ฐฐ๋ ฅ์ด๋ ์ ํญ๋ ฅ ๊ฐ์ ๋ฌผ๋ฆฌ์ ์ธ ํน์ฑ๋ ์๋์ผ๋ก ์ ์ฉ๋๊ธฐ ๋๋ฌธ์, ์ด๋ ์๋๊ฐ ์์ํ ์ฆ๊ฐํ๊ฑฐ๋ ๊ฐ์ํ๋ ํ์ค์ ์ธ ์์ง์์ ๊ตฌํํ ์ ์๋ค.
rigidbody2D.velocity = new Vector2(moveDirection * speed, rigidbody2D.velocity.y);
3. ๋ฌผ๋ฆฌ์ ์ธ ํ์ด๋ ํ ํฌ๋ฅผ ์ ์ฉํ ๋:
- ์๋ฅผ ๋ค์ด, ํน์ ์ค๋ธ์ ํธ์ ์ถฉ๊ฒฉ์ ์ฃผ๊ฑฐ๋ ๋ฐ์ด๋ด๋ ํ์ ๊ฐํ๋ ๊ฒฝ์ฐ, Rigidbody๋ฅผ ํตํด AddForce()๋ AddTorque()๋ฅผ ์ฌ์ฉํด ๋ฌผ์ฒด์ ํ์ ์ ์ฉํ ์ ์๋ค. ์ด๋ฅผ ํตํด ๋ฌผ์ฒด๊ฐ ํ๊ฒจ๋๊ฑฐ๋ ํ์ ํ๋ ๋ฌผ๋ฆฌ์ ๋ฐ์์ ๊ตฌํํ ์ ์๋ค.
rigidbody2D.AddForce(new Vector2(forceX, forceY), ForceMode2D.Impulse);
๐ ์
๋ ฅ์ ๋ฐ์ ์ค๋ธ์ ํธ๋ฅผ ์ด๋์ํค๊ธฐ ์ํด์๋?
-
Input ์์คํ
๋ ํ์ํ๊ฒ ์ง๋ง, ๊ฒฐ๊ตญ Input ์์คํ
์ผ๋ก ์ป์ ๊ฐ์ ๋ฒกํฐ๋ก ๋ณํํด์ผ , 2D๋ 3D์์ ๊ณต๊ฐ ์ด๋์ ํ๊ธฐ ์ํด์๋ Vector๊ฐ ํ์ํ๋ค.
-
์๋ฅผ๋ค์ด) ์๋ ์ฝ๋๋ฅผ ๋ณด์
float h = Input.GetAxis("Horizontal");
if (h > 0)
{
Vector2 moveDir = new Vector2(h, 0);
rigid.velocity = new Vector2(moveDir.x * speed, rigid.velocity.y);
anim.SetFloat("PositionX", moveDir.x);
transform.localScale = new Vector3(1, 1, 1);
}
- h ๋ณ์๋ Input ์์คํ
์ ํตํด ์ํ ๊ฐ์ ์ ์ฅํ๊ณ ์๋ค. ์ํ ๊ฐ์ -1 ~ 1 ์ ๊ฐ์ ๊ฐ์ง๋ค. (์ค๋ฅธ์ชฝ์ ๋๋ฅด๋ฉด ๋๋ฅผ ์๋ก 1์ ๊ฐ๊น์์ง๊ณ , ์ผ์ชฝ์ ๋๋ฅด๋ฉด ๋๋ฅผ์๋ก -1์ ๊ฐ๊น์์ง, ์ ๋๋ฅด๋ฉด 0์ ๊ฐ๊น์์ง)
โญ Vector2 moveDir = new Vector2(h, 0); ์๋ฏธ
- new ํค์๋๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฒกํฐ๋ฅผ ์์ฑํ๋ค. (h,0)์ ๊ฐ์ง๋ ๋ฒกํฐ๋ฅผ ์์ฑํ๋ค.
- h ๋ -1 ~ 1 ๊ฐ์ ๊ฐ์ง๋ค. ์ด๋ ๋ฐฉํฅ์ ๋ํ๋ด๋ ๋ฒกํฐ์ ์ฑ์ง์ ๊ฐ๊ณ ์๋ค. ์ฆ, h๊ฐ ์์์ผ ๋ ์ค๋ฅธ์ชฝ ๋ฐฉํฅ ๋ฒกํฐ๊ฐ ๋๊ณ , h๊ฐ ์์์ผ ๋ ์ผ์ชฝ ๋ฐฉํฅ ๋ฒกํฐ๊ฐ ๋๋ค.
- ๊ฒฐ๋ก : moveDir์ ๋ฐฉํฅ๋ฒกํฐ์ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค.
โญ rigid.velocity = new Vector2(moveDir.x * speed, rigid.velocity.y); ์๋ฏธ
- velocity๋ Rigidbody์ ์ ์ฉ๋๋ ํ์ฌ ์๋๋ฅผ ๋ํ๋ธ๋ค. ์ด ์๋๋ Vector2๋ก ํํ์ด ๊ฐ๋ฅํ๋ค. ๊ทธ ์ด์ ๋ ์๋๋ผ๋ ๊ฐ๋
์ x,y,z ์ถ์ด๋ x,y์ถ์ ํตํด ์ด๋์ ํด์ผ ํ๋ฏ๋ก, ์ด๋ํ๊ธฐ ์ํด์๋ ๊ฐ ์ถ์ ๋ด๋นํ๋ Vector๋ก๋ง ํํ์ด ๊ฐ๋ฅํ๋ค.