유튜브 골드메탈님 강의 보면서 2D 플랫폼 게임 만들기 따라하는 중입니다.

코드도 똑같이 작성하고 하나하나 따라가는데 계속 좌우로 움직일때 소수점 단위로 y값이 바뀌네요..

이것때문에 이동하다가 넘어지는 것도 있는거 같고, 점프 기능에서 떨어질때 레이 활성화 되는데 y값이 조금씩 떨어지면 활성화 되버려서 점프 모션이 안나옵니다..

저항은 마찰력없이 공기저항만 넣었어요.

코드오류는 없습니다.

<코드>

using UnityEngine;


public class PlayerMove : MonoBehaviour

{

    public float maxSpeed;

    public float jumpPower;

    Rigidbody2D rigid;

    SpriteRenderer spriteRenderer;

    Animator anim;

    void Awake()

    {

        rigid = GetComponent<Rigidbody2D>();

        spriteRenderer = GetComponent<SpriteRenderer>();

        anim = GetComponent<Animator>();

    }


    private void Update()

    {

        //jump

        if (Input.GetButtonDown("Jump"))

        {

            rigid.AddForce(Vector2.up * jumpPower, ForceMode2D.Impulse);

                    

        }

            


        //stop speed

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

            rigid.velocity = new Vector2(rigid.velocity.normalized.x * 0.5f, rigid.velocity.y);

        }


        //direction sprite

        if(Input.GetButtonDown("Horizontal"))

            spriteRenderer.flipX = Input.GetAxisRaw("Horizontal") == -1;


        //Animation

        if (Mathf.Abs(rigid.velocity.x) < 0.3)

            anim.SetBool("isWalking", false);

        else

            anim.SetBool("isWalking", true);

    }


    void FixedUpdate()

    {

        //move speed

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


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


        //max speed

        if (rigid.velocity.x > maxSpeed) 

            rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);

        else if (rigid.velocity.x < maxSpeed*(-1))

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


        //landing platform

        if(rigid.velocity.y < 0) {

            Debug.DrawRay(rigid.position, Vector3.down, new Color(0, 1, 0));

            RaycastHit2D rayHit = Physics2D.Raycast(rigid.position, Vector3.down, 1, LayerMask.GetMask("Platform"));

            if (rayHit.collider != null) {

                if (rayHit.distance < 0.5f)

                    anim.SetBool("isJumping", false);

            }

        }

    }

}