7cf3c028e2f206a26d81f6e64f8673


์ œ๊ฐ€ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฐฉํ–ฅ์€ ์บ๋ฆญํ„ฐ๊ฐ€ ์–ผ์Œ๋งต ๋ฐ–์—์„œ๋Š” ์„ค์ •ํ•œ ์ตœ๋Œ€์†๋„๋กœ ์ด๋™ํ•˜๋‹ค๊ฐ€

์–ผ์Œ๋งต์œผ๋กœ ๋“ค์–ด๊ฐ€๋ฉด ํ‚ค๋ณด๋“œ์—์„œ ์†์„ ๋–ผ๋„ ๋–ผ๊ธฐ ์ง์ „ ์ด๋™ํ•˜๋˜ ๋ฐฉํ–ฅ์œผ๋กœ ์ตœ๋Œ€์†๋„*2๋กœ ์ด๋™ํ•˜๊ธธ ๋ฐ”๋ผ๊ณ ,

์–ผ์Œ๋งต ์•ˆ์—์„œ ๋ฐฉํ–ฅ์„ ์‚ด์ง๋งŒ ํ‹€์–ด๋„ ์–ผ์Œ๋งต ๋‚ด์—์„œ๋Š” ์‚ด์ง ํ‹€์€ ๋ฐฉํ–ฅ์œผ๋กœ ์ตœ๋Œ€์†๋„*2๋กœ ์ด๋™ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.


๊ทธ๋Ÿฐ๋ฐ ํ˜„์žฌ ๋จธ๋ฆฌ์†์œผ๋กœ ์ด๋™ ๊ตฌํ˜„์„ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ์ดํ•ด๊ฐ€ ๊ฐ€์งˆ์•Š์Šต๋‹ˆ๋‹ค.

ย 


ํ˜„์žฌ ๋งต ์ƒํƒœ์ž…๋‹ˆ๋‹ค.


์–ผ์Œ๊ธธ์€ ํƒ€์ผ๋งต์œผ๋กœ ๋งŒ๋“ค์—ˆ๊ณ , Material2D๋ฅผ ์ด์šฉํ•ด Friction ๋งˆ์ฐฐ๋ ฅ์„ 0์œผ๋กœ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

Composite Collider 2D์— Is Trigger๋ฅผ ์ฒดํฌํ•ด์„œ ํ”Œ๋ ˆ์ด์–ด์™€ ์ถฉ๋Œ๊ฐ์ง€๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ด๋ค„์ง€๊ณ  ์žˆ์Œ์„ ์ฒดํฌํ–ˆ๊ณ ,

Geometry Type์„ Polygons๋กœ ํ•˜์—ฌ ๋น™ํŒ๊ธธ ๋‚ด๋ถ€๋„ ์ฝœ๋ผ์ด๋”๋ฅผ ๊ฐ€๋“ ์ฑ„์›Œ๋†”์„œ ์บ๋ฆญํ„ฐ๊ฐ€ ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐ€๋„ ๊ณ„์†ํ•ด์„œ ์ถฉ๋Œ์ด ๊ฐ์ง€๋ฉ๋‹ˆ๋‹ค.

OnTriggerEnter2D๋กœ ์–ผ์Œ๋งต์— ๋“ค์–ด์˜ค๋ฉดย ย isSliding = true;๋กœ ํ˜„์žฌ ๋ฏธ๋„๋Ÿฌ์ง€๊ณ  ์žˆ๋Š” ์ƒํƒœ์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๊ณ ,

OnTriggerExit2D๋กœ ์–ผ์Œ๋งต์—์„œ ๋‚˜๊ฐ€๋ฉดย ย  isSliding = false;๋กœ ๋”๋Š” ๋ฏธ๋„๋Ÿฌ์ง€์ง€ ์•Š๊ณ ์žˆ๋Š” ์ƒํƒœ์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ์Šต๋‹ˆ๋‹ค.




ํ˜„์žฌ ์บ๋ฆญํ„ฐ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.


ย  ย  private void Update()

ย  ย  {

ย  // ์ƒํ•˜์ขŒ์šฐ ํ‚ค๋ณด๋“œ ๊ฐ’ ์ž…๋ ฅ๋ฐ›์Œ

ย  ย  ย  ย  h = Input.GetAxisRaw("Horizontal");

ย  ย  ย  ย  v = Input.GetAxisRaw("Vertical");


ย  ย  ย  ย  //stop speedย  ย addForce๋กœ ์ด๋™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ‚ค๋ณด๋“œ์—์„œ ์†์„ ๋–ผ๋„ ํ˜ผ์ž ๋А๋ฆฌ๊ฒŒ ์ด๋™ํ•˜๋Š”๊ฒƒ์„ ๋ง‰์Œ

ย  ย  ย  ย  if (Input.GetButtonUp("Horizontal"))

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  rb.velocity = new Vector2(rb.velocity.normalized.x * 0, rb.velocity.y);

ย  ย  ย  ย  }


ย  ย  ย  ย  //stop speedย  ย addForce๋กœ ์ด๋™ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ‚ค๋ณด๋“œ์—์„œ ์†์„ ๋–ผ๋„ ํ˜ผ์ž ๋А๋ฆฌ๊ฒŒ ์ด๋™ํ•˜๋Š”๊ฒƒ์„ ๋ง‰์Œ

ย  ย  ย  ย  if (Input.GetButtonUp("Vertical"))

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  rb.velocity = new Vector2(rb.velocity.x, rb.velocity.normalized.y * 0);

ย  ย  ย  ย  }


ย  ย  ย  ย  Debug.Log("x์†๋„ : " + rb.velocity.x + "y์†๋„ : " + rb.velocity.y + "์Šฌ๋ผ์ด๋”ฉ ์—ฌ๋ถ€ : " + isSliding);

ย  ย  }

ย  ย ย 

ย  ย  void FixedUpdate()

ย  ย  {

ย  // ์ƒํ•˜์ขŒ์šฐ ์ด๋™

ย  ย  ย  ย  rb.AddForce(Vector2.right * h, ForceMode2D.Impulse);

ย  ย  ย  ย  rb.AddForce(Vector2.up * v, ForceMode2D.Impulse);


ย  // ์ตœ๋Œ€์†๋„ ์ œํ•œ

ย  ย  ย  ย  if (rb.velocity.x > maxSpeed) // right max speed

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  rb.velocity = new Vector2(maxSpeed, rb.velocity.y);

ย  ย  ย  ย  }

ย  ย  ย  ย  else if (rb.velocity.x < maxSpeed * (-1))// left max speed

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  rb.velocity = new Vector2(maxSpeed * (-1), rb.velocity.y);

ย  ย  ย  ย  }


ย ย // ์ตœ๋Œ€์†๋„ ์ œํ•œ

ย  ย  ย  ย  if (rb.velocity.y > maxSpeed) // right max speed

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  rb.velocity = new Vector2(rb.velocity.x, maxSpeed);

ย  ย  ย  ย  }

ย  ย  ย  ย  else if (rb.velocity.y < maxSpeed * (-1))// left max speed

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  rb.velocity = new Vector2(rb.velocity.x, maxSpeed * (-1));

ย  ย  ย  ย  }

ย  ย  }


์ˆ˜ํ•™์  ์ง€์‹์ด ์•ฝํ•˜๊ณ , ์ด๋™์— ๋Œ€ํ•œ ์ •ํ™•ํ•œ ์ดํ•ด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์ฝ”๋“œ๋ฅผ ์ธํ„ฐ๋„ท์—์„œ ์ฐพ์•„์„œ ๊ตฌํ˜„ํ•˜๋‹ค๋ณด๋‹ˆ

ํ™•์‹คํžˆ ๋‚ด๊ฐ€ ์›ํ•˜๋Š”๋Œ€๋กœ ๊ตฌํ˜„์ด ํž˜๋“ ๊ฒƒ๊ฐ™์Šต๋‹ˆ๋‹ค.


ํ˜น์‹œ ์–ด๋–ค๋ฐฉ์‹์œผ๋กœ ํ•ด์•ผํ•˜๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹ค์ˆ˜ ์žˆ์œผ์‹ค๊นŒ์š”?