Chapter Why ? , When ? , How ?

๊ฐœ๋ฐœํ•˜๋Š” ์šด๋™์ธยท2025๋…„ 8์›” 27์ผ

๐Ÿ“„ ์˜ค๋ธŒ์ ํŠธ ์ด๋™ ๋ถ€๋ถ„

  • ์œ ๋‹ˆํ‹ฐ์—์„œ๋Š” ๋‘ ๊ฐ€์ง€์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฒซ๋ฒˆ์งธ๋Š” Transfrom ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹๊ณผ Rigidbody ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ์‹

โญ why? ์™œ Transform์„ ์‚ฌ์šฉํ• ๊นŒ?

  • ์žฅ์  : ์ง์ ‘์ ์œผ๋กœ ์œ„์น˜๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์–ด ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ณ , ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์›€์ง์ž„์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์ถฉ๋Œ์ฒ˜๋ฆฌ๋‚˜ ์ค‘๋ ฅ ํšจ๊ณผ๊ฐ€ ํ•„์š” ์—†์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค
  • ๋‹จ์ : ๋ฌผ๋ฆฌ์  ๋ฐ˜์‘์ด ์—†๊ธฐ ๋•Œ๋ฌธ์—, ๋ฌผ๋ฆฌ ๊ธฐ๋ฐ˜์œผ๋กœ ์›€์ง์ด๋Š” ๊ฒŒ์ž„์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ๊ฐ๊ฐ์ด ๋–จ์–ด์ง„๋‹ค. ์ถฉ๋Œ, ์ค‘๋ ฅ ๋“ฑ์„ ์ˆ˜๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ, ๋„ˆ๋ฌด ๋น ๋ฅด๊ฒŒ ์ด๋™ํ•˜๋ฉด ๋ฌผ๋ฆฌ ์ถฉ๋Œ์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์บ๋ฆญํ„ฐ๊ฐ€ ๋ฒฝ์„ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ๋‹ค

โญ when? ์–ธ์ œ Transform์„ ์‚ฌ์šฉํ• ๊นŒ?

  • ์ถฉ๋Œ, ์ค‘๋ ฅ ์ฒ˜๋ฆฌ, ๋ฌผ๋ฆฌ ๋ฐ˜์‘์ด ํ•„์š” ์—†๋Š” ๊ฒฝ์šฐ, ๋‹จ์ˆœํ•˜๊ฒŒ ์ด๋™๋งŒ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • ์ •๋ฐ€ํ•œ ์œ„์น˜ ์ œ์–ด๊ฐ€ ํ•„์š”ํ•  ๋•Œ, ์ง์ ‘ ์ขŒํ‘œ๋ฅผ ์„ค์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ธ๋ฐ€ํ•œ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค
  • ์นด๋ฉ”๋ผ์˜ ์ด๋™, 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๋กœ๋งŒ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€