본문 바로가기

Unity 공부시작/Unity2D 게임 및 기능구현

유니티2D :: 캐릭터 이동, 점프 및 애니메이션 구현

1. 이동


void Move()
    {
        Vector3 moveVelocity = Vector3.zero;

        // left
        if(Input.GetAxisRaw("Horizontal") < 0)
        {
            moveVelocity = Vector3.left;

            sr.flipX = true;
        }
        // right
        else if (Input.GetAxisRaw("Horizontal") > 0)
        {
            moveVelocity = Vector3.right;

            sr.flipX = false;
        }

        transform.position += moveVelocity * movePower * Time.deltaTime;
    }

좌, 우 전환은 flipX으로 구현



2. 점프


 void Jump()
    {
        if (!isJumping)
            return;

        rdb2.velocity = Vector3.zero;

        Vector3 jumpVelocity = new Vector3(0, jumpPower, 0);
        rdb2.AddForce(jumpVelocity, ForceMode2D.Impulse);

        isJumping = false;
    }

AddForce, ForceMode2D.Impulse를 통해 보다 부드러운 점프를 구현



3. 이동과 점프의 애니메이션 파라미터


void Update() { // 떨어지고 있는 경우 if(rdb2.velocity.y < 0) { ani.SetBool("IsRising", false); ani.SetBool("IsFalling", true); } // 점프하고 있는 경우 else if (rdb2.velocity.y > 0) { ani.SetBool("IsRising", true); ani.SetBool("IsFalling", false); } // 가만히 있는 경우 else { ani.SetBool("IsRising", false); ani.SetBool("IsFalling", false); } if (Input.GetAxisRaw("Horizontal") == 0) { ani.SetBool("IsMoving", false); } else if (Input.GetAxisRaw("Horizontal") < 0) { ani.SetBool("IsMoving", true); ani.SetInteger("Direction", -1); } else if (Input.GetAxisRaw("Horizontal") > 0) { ani.SetBool("IsMoving", true); ani.SetInteger("Direction", 1); } if (Input.GetButtonDown("Jump")) { isJumping = true; } }

Rigidbody2D의 velocity.y가 음수인 경우 : 떨어지는 중
  양수인 경우 : 점프하는 중
  0인 경우     : 착지해있는 경우

* 착지를 캐릭터의 발에 collider2D를 추가하여 땅에 닿았을 시 착지했음을 표시하는 것도 방법


주의) 초보자의 생각대로 구현한 것이므로 좋지 않은 방법일 가능성이 많음