void FixedUpdate () {

ย  ย  ย  ย  bool wasGrounded = isGrounded;


ย  ย  ย  ย  Collider2D[] colliders = Physics2D.OverlapCircleAll(groundCheck.position, checkRadius, whatIsGround);

ย  ย  ย  ย  for (int i = 0; i < colliders.Length; i++)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  if (colliders[i].gameObject != gameObject)

ย  ย  ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  ย  ย  isGrounded = true;

ย  ย  ย  ย  ย  ย  ย  ย  if (!wasGrounded)

ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  animator.SetBool("Jump", false);

ย  ย  ย  ย  ย  ย  }

ย  ย  ย  ย  }


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

ย  ย  ย  ย  Vector3 targetVelocity = new Vector3(moveInput * speed * Time.fixedDeltaTime, rb.velocity.y);

ย  ย  ย  ย  rb.velocity = Vector3.SmoothDamp(rb.velocity, targetVelocity, ref refVelocity, m_MovementSmoothing);

ย  ย  ย  ย  animator.SetFloat("Speed", Mathf.Abs(moveInput) * speed);


ย  ย  ย  ย  if (facingRight == false && moveInput > 0) {

ย  ย  ย  ย  ย  ย  Flip();

ย  ย  ย  ย  }

ย  ย  ย  ย  else if (facingRight == true && moveInput < 0) {

ย  ย  ย  ย  ย  ย  Flip();

ย  ย  ย  ย  }

ย  ย  ย  ย ย 

}


ย  ย  void Update()

ย  ย  {

ย  ย  ย  ย  if (isGrounded == true)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  extraJumps = 1;

ย  ย  ย  ย  }


ย  ย  ย  ย  if (Input.GetButtonDown("Jump") && extraJumps > 0)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  isGrounded = false;

ย  ย  ย  ย  ย  ย  animator.SetBool("Jump", true);

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

ย  ย  ย  ย  ย  ย  extraJumps--;

ย  ย  ย  ย  }

ย  ย  ย  ย  else if (Input.GetButtonDown("Jump") && extraJumps == 0 && isGrounded == true)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  isGrounded = false;

ย  ย  ย  ย  ย  ย  animator.SetBool("Jump", true);

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

ย  ย  ย  ย  }

ย  ย  }


์•„๊นŒ์ „์— ์งˆ๋ฌธ ์˜ฌ๋ ธ๋Š”๋ฐ ์ด ์งˆ๋ฌธ์— ๋Œ€ํ•ด์„  ๋‹ต๋ณ€ ํ•ด์ค€ ์‚ฌ๋žŒ์ด ์—†์–ด์„œ ใ…  ๊ณ„์† ๋ด๋„ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ๋‹ค์‹œ ์งˆ๋ฌธํ• ๊ฒŒ.ใ… .

์—ฌ๊ธฐ์ €๊ธฐ์„œ ์ฝ”๋“œ ๋ณด๊ณ  ์ฐธ๊ณ ํ•˜๋ฉด์„œ ๋ง‰ ํ•ฉ์ณ์„œ ์บ๋ฆญํ„ฐ ์ด๋™ ๋กœ์ง์„ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ..


์ ํ”„ ์• ๋‹ˆ๋ฉ”์ด์…˜์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒป์–ด.. ๋”๋ธ” ์ ํ”„๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๊ฑด์ง€๋Š” ๋ชจ๋ฅด๊ฒŸ์ง€๋งŒ

๋‚ด๊ฐ€ ์˜๋„ํ•œ ๊ฑด ์ ํ”„ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ณต์ค‘์— ๋œจ๊ณ , ๊ณต์ค‘์— ๋–  ์žˆ๋Š” ๊ทธ ์‹œ๊ฐ„๋™์•ˆ์€ isGrounded = false๊ฐ€ ๋˜๊ณ , animator ์˜ Jump parameter๋Š” true์ธ ์ƒํƒœ์—ฌ์•ผ ํ•˜๋Š”๋ฐ

์ ํ”„ ๋ฒ„ํŠผ์„ ๋”ฑ ๋ˆ„๋ฅธ ๊ทธ ์ˆœ๊ฐ„๋งŒ isGrounded = false, Jump = true๊ฐ€ ๋˜๊ณ  ๊ทธ ๋‹ค์Œ์— ๋ฐ”๋กœ isGrounded = true, Jump = false๋กœ ๋ฐ”๋€Œ์–ด๋ฒ„๋ ค.

๊ทผ๋ฐ parameter๋ฅผ ๋งค๊ฐœ๋กœ animation transition์„ ์งœ๋†“์•˜์–ด์„œย ์ ํ”„ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด 0.1์ดˆ ์‹คํ–‰๋˜๊ณ  ๋ฐ”๋กœ ์›๋ž˜ Idle ์• ๋‹ˆ๋ฉ”์ด์…˜์ด๋‚˜ run ์• ๋‹ˆ๋ฉ”์ด์…˜์œผ๋กœ ๋Œ์•„๊ฐ€๋ฒ„๋ฆฌ๋”๋ผ.

๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ ๋‚ด์šฉ ์ค‘์— ์–ด๋–ค ๊ฒŒ ๋ฌธ์ œ์ธ๊ฑด์ง€ ์•„๋ฌด๋ฆฌ ๋ด๋„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์–ด..


์ฐธ๊ณ ๋กœ ์ ํ”„ ์‹คํ—˜ํ•˜๊ณ ์žˆ๋Š” ํ”Œ๋žซํผ์€ Tilemap์œผ๋กœ ์งœ์„œ tilemap collider๋ž‘ composite collider ๋‘๊ฐœ ์“ฐ๊ณ ์žˆ์Œ.