안녕하세요! 이번 포스팅에서는 캐릭터가 점프할 수 있도록 기능을 추가하고, 바닥에 닿아 있을 때만 점프가 가능하도록 설정해보겠습니다. 이를 통해 플레이어가 보다 자연스러운 점프와 착지 동작을 할 수 있게 됩니다.
1. 점프를 위한 스크립트 작성
이제 PlayerMovement 스크립트에 점프 기능을 추가하겠습니다.
1. 점프 관련 변수 추가
- PlayerMovement 스크립트를 열고, 아래와 같이 점프 속도와 바닥 충돌을 위한 변수를 추가합니다.
public float jumpForce = 10f; // 점프 높이 조절
private bool isGrounded; // 바닥에 닿아 있는지 체크
public Transform groundCheck; // 바닥 체크 위치
public float checkRadius = 0.2f; // 바닥 체크 범위
public LayerMask whatIsGround; // 바닥 레이어 설정
2. 점프 기능 추가
- Update() 함수에 점프 입력을 체크하는 코드를 추가합니다.
- FixedUpdate() 함수에 바닥 충돌을 감지하는 코드를 작성해 점프 제어를 할 수 있도록 설정합니다.
void Update()
{
moveInput = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(moveInput * moveSpeed, rb.velocity.y);
// 점프 입력 감지
if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
{
rb.velocity = Vector2.up * jumpForce;
}
}
void FixedUpdate()
{
// 바닥 충돌 감지
isGrounded = Physics2D.OverlapCircle(groundCheck.position, checkRadius, whatIsGround);
}
- jumpForce는 점프의 세기를 조절하는 변수입니다. 높이 조절을 위해 Inspector에서 수정할 수 있습니다.
- isGrounded는 캐릭터가 바닥에 닿아 있는지 확인하여 공중에서 점프하지 않도록 제어하는 변수입니다.
3. groundCheck 오브젝트 설정
- Player 오브젝트의 하단에 위치할 Empty Object를 생성하여 이름을 groundCheck로 설정합니다.
- Inspector에서 groundCheck를 PlayerMovement 스크립트의 Ground Check 필드에 드래그하여 연결합니다.
4. 바닥 레이어 생성
- Project 창에서 Ground 레이어를 생성하고, 바닥 역할을 하는 오브젝트들에 Ground 레이어를 적용합니다.
- 스크립트에서 whatIsGround 필드에 Ground 레이어를 설정합니다.
2. 테스트 및 디버깅
- 플레이 모드에서 점프 테스트
- Play 모드로 실행한 후, 스페이스바를 눌러 플레이어가 점프하는지 확인합니다.
- 점프 높이가 마음에 들지 않는다면 jumpForce 값을 조정해보세요.
- 바닥 충돌 체크 확인
- 공중에서 점프가 안 되도록 설정했으므로, 스페이스바를 연속해서 눌러도 공중에서는 점프하지 않도록 동작을 확인하세요.
3. (선택) 이중 점프 기능 추가하기
이중 점프는 플랫폼 게임에서 종종 사용되는 기능입니다. 이중 점프를 구현하기 위해 남은 점프 횟수를 체크하는 코드를 추가할 수 있습니다.
1. 이중 점프 변수 추가
public int extraJumps = 1; // 이중 점프 횟수
private int jumpCount;
2. Update()에서 이중 점프 코드 수정
- isGrounded가 true가 되면 jumpCount를 초기화하고, 점프 시마다 횟수를 차감하도록 설정합니다.
void Update()
{
moveInput = Input.GetAxis("Horizontal");
rb.velocity = new Vector2(moveInput * moveSpeed, rb.velocity.y);
if (isGrounded)
{
jumpCount = extraJumps; // 이중 점프 가능 횟수 초기화
}
if (Input.GetKeyDown(KeyCode.Space) && jumpCount > 0)
{
rb.velocity = Vector2.up * jumpForce;
jumpCount--;
}
else if (Input.GetKeyDown(KeyCode.Space) && isGrounded && jumpCount == 0)
{
rb.velocity = Vector2.up * jumpForce;
}
}
정리 및 다음 단계 예고
축하합니다! 이번 포스팅에서는 캐릭터의 점프와 바닥 충돌을 통해 보다 자연스러운 이동을 구현했습니다. 다음 포스팅에서는 적 캐릭터를 추가하고, 적의 기본 이동 패턴과 플레이어 인지 후 추적 기능을 구현해 보겠습니다.
'유니티 > 플랫폼 게임 만들기' 카테고리의 다른 글
유니티로 슈퍼마리오 같은 게임 만들기 #6 - 캐릭터 애니메이션 추가하기 (0) | 2024.11.04 |
---|---|
유니티로 슈퍼마리오 같은 게임 만들기 #5 - 적과의 충돌 처리 및 기본 공격 기능 구현 (0) | 2024.10.30 |
유니티로 슈퍼마리오 같은 게임 만들기 #4 – 적 캐릭터 추가와 플레이어 추적 기능 구현 (1) | 2024.10.30 |
유니티로 슈퍼마리오같은 게임 만들기 #2 – 플레이어 캐릭터 추가 및 이동 구현 (1) | 2024.10.26 |
유니티로 슈퍼마리오와 같은 게임 만들기 #1 (1) | 2024.10.26 |