viewimage.php?id=2abcdd23dad63db0&no=24b0d769e1d32ca73fef80fa11d028314d28878c8e439571894d71b564e3c7c6adfa1306d976a1745cd9129aca73132fbce64259506054b5b9d12be2f13100

์–ด์ œ๊ป˜ ์ ํ”„ ์• ๋‹ˆ๋ฉ”์ด์…˜๋•Œ๋งค ์งˆ๋ฌธ ์˜ฌ๋ ธ์—ˆ๋˜ ์•ค๋ฐ, ๊ฒฐ๊ตญ์€ ํ•ด๊ฒฐ๋ชปํ•จใ… ใ… ย 

๋‹ค๋ฅธ ์ปจํŠธ๋กค๋Ÿฌ ์œ ํˆฌ๋ธŒ๋‚˜ ์œ ๋‹ˆํ‹ฐ ํŠœํ† ๋ฆฌ์–ผ๊บผ ๊ฐ€์ ธ์™€์„œ ์จ๋ณด๋‹ˆ ์ด๊ฒŒ ์กฐ์ž‘๊ฐ์ด ์ ค ์ข‹์€๊ฑฐ๊ฐ™์•„์„œ ๋ชป๋ฒ„๋ฆฌ๊ฒŸ์Œ ใ… 


์—ฌํŠผ, ์งˆ๋ฌธ์€ ์ ํ”„๋ฅผ ํ•ด์„œ ๋•…์œผ๋กœ ๋–จ์–ด์ง€๋ฉด ์ € ๋•… ์†์œผ๋กœ ์™ ๋“ค์–ด๊ฐ€๋ฒ„๋ฆผ.

ํƒ€์ผ๋งต์„ ์“ฐ๊ณ ์žˆ๊ณ , ํƒ€์ผ๋งต ์ฝœ๋ผ์ด๋” + ์ปดํผ์ง“ ์ฝœ๋ผ์ด๋” ์“ฐ๊ณ  ์žˆ๋Š”๋ฐ, ๋ญ๊ฐ€ ์›์ธ์ธ์ง€๋ฅผ ์ •ํ™•ํžˆ ๋ชจ๋ฅด๊ฒ ์—‰


ํ˜น์‹œ ๋ชฐ๋ผ์„œ ์ฝ”๋“œ ๋˜ ์˜ฌ๋ฆผ ใ…Žย 


์•„, ๊ทธ๋ฆฌ๊ณ  ํ˜น์‹œ ํƒ€์ผ๋งต ์“ฐ๋Š”๋ฐ ํ”Œ๋ ˆ์ด ๋ฒ„ํŠผ ๋ˆŒ๋Ÿฌ์„œ ํ…Œ์ŠคํŠธํ•˜๋‹ค๋ณด๋ฉด ํƒ€์ผ๋งต์— ์ž๊พธ ํฐ ์„ ๊ฐ™์€๋ฐ ์ƒ๊ฒผ๋‹ค๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  ํ•˜๋Š”๋ฐ, ์™œ ๊ทธ๋Ÿฐ๊ฑด์ง€ ์•„๋Š” ์‚ฌ๋žŒ ์žˆ์—‰?


[SerializeField] private float speed;

ย  ย  [SerializeField] private float jumpForce;

ย  ย  [Range(0, .3f)] [SerializeField] private float m_MovementSmoothing = .05f;

ย  ย  [SerializeField] private Transform groundCheck;

ย  ย  [SerializeField] private LayerMask whatIsGround;

ย  ย  [SerializeField] private Animator animator;


ย  ย  const float checkRadius = 0.1f;

ย  ย  private float moveInput;

ย  ย  private Rigidbody2D rb;

ย  ย  private bool facingRight = true;

ย  ย  private bool isGrounded = false;

ย  ย  private bool jump = false;

ย  ย  private int extraJumps = 1;

ย  ย  private Vector3 refVelocity = Vector3.zero;


ย  ย  void Start()

ย  ย  {

ย  ย  ย  ย  rb = GetComponent<Rigidbody2D>();

ย  ย  }


ย  ย  void FixedUpdate()

ย  ย  {

ย  ย  ย  ย  bool wasGrounded = isGrounded;

ย  ย  ย  ย  isGrounded = false;


ย  ย  ย  ย  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);

ย  ย  ย  ย  ย  ย  ย  ย  ย  ย  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()

ย  ย  {

ย  ย  ย  ย  Debug.Log(isGrounded);

ย  ย  ย  ย  //Debug.Log(animator.GetBool("Jump"));

ย  ย  ย  ย  if (isGrounded == true)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  extraJumps = 1;

ย  ย  ย  ย  }


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

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  Jump();

ย  ย  ย  ย  ย  ย  extraJumps--;

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

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  Jump();

ย  ย  ย  ย  }

ย  ย  }


ย  ย  void Jump()

ย  ย  {

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

ย  ย  ย  ย  jump = true;

ย  ย  ย  ย  isGrounded = false;

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

ย  ย  }


ย  ย  void Flip()

ย  ย  {

ย  ย  ย  ย  facingRight = !facingRight;

ย  ย  ย  ย  Vector2 theScale = transform.localScale;

ย  ย  ย  ย  theScale.x *= -1;

ย  ย  ย  ย  transform.localScale = theScale;

ย  ย  }