유니티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; } }