Unity 2D 캐릭터 컨트롤러 구현
2024. 12. 9. 06:38ㆍUnity
Unity 2D 캐릭터 컨트롤러 구현하기
2D 게임 개발에서 캐릭터 컨트롤러는 플레이어 캐릭터의 이동과 점프, 상호작용 등의 동작을 구현하는 핵심 요소입니다.
Unity의 다양한 도구와 기능을 활용하면 효율적으로 캐릭터를 제어할 수 있습니다.
이번 포스팅에서는 2D 캐릭터 컨트롤러를 단계적으로 구현하는 방법을 알아봅니다.
1. 캐릭터 컨트롤러란?
캐릭터 컨트롤러는 플레이어의 입력을 받아 캐릭터를 이동시키고, 물리 엔진과 상호작용하며 애니메이션을 실행하는 시스템입니다.
2D 게임에서는 주로 다음 기능을 포함합니다:
- 이동: 좌우 이동 및 속도 조절.
- 점프: 플레이어가 점프할 수 있는 기능.
- 애니메이션: 움직임에 따라 적절한 애니메이션 재생.
2. 프로젝트 설정
1) Unity 프로젝트 생성
- Unity에서 2D Template으로 새 프로젝트를 생성합니다.
2) 필요한 Asset 추가
- 캐릭터 스프라이트와 배경 이미지를 프로젝트에 추가합니다.
3) 캐릭터 오브젝트 생성
- 빈 GameObject를 생성하고 이름을 Player로 설정합니다.
- Player 오브젝트에 Sprite Renderer를 추가하고 캐릭터 스프라이트를 설정합니다.
- Rigidbody 2D와 Box Collider 2D를 추가하여 물리적 충돌 및 중력 효과를 적용합니다.
3. 기본 이동 구현
1) 스크립트 작성
Player 오브젝트에 아래 스크립트를 연결하여 기본 이동 기능을 구현합니다.
using UnityEngine;
public class CharacterController2D : MonoBehaviour
{
public float moveSpeed = 5f; // 이동 속도
private Rigidbody2D rb;
private Vector2 movement;
void Start()
{
rb = GetComponent<Rigidbody2D>();
}
void Update()
{
// 입력 감지
movement.x = Input.GetAxis("Horizontal");
}
void FixedUpdate()
{
// 물리 기반 이동 처리
rb.velocity = new Vector2(movement.x * moveSpeed, rb.velocity.y);
}
}
2) 주요 코드 설명
- Input.GetAxis("Horizontal"): 키보드 입력을 감지하여 좌우 방향으로 이동.
- Rigidbody2D.velocity: Rigidbody의 속도를 설정하여 물리적으로 이동.
4. 점프 기능 추가
1) 점프 변수 추가
public float jumpForce = 10f; // 점프 힘
private bool isGrounded = false; // 캐릭터가 땅에 있는지 확인
2) 점프 로직 구현
void Update()
{
movement.x = Input.GetAxis("Horizontal");
// 점프 입력 감지
if (Input.GetButtonDown("Jump") && isGrounded)
{
rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);
isGrounded = false;
}
}
void OnCollisionEnter2D(Collision2D collision)
{
// 땅과 충돌 감지
if (collision.contacts[0].normal.y > 0.5f)
{
isGrounded = true;
}
}
3) 점프 동작 추가 설명
- AddForce: Rigidbody에 힘을 가해 점프를 실행.
- OnCollisionEnter2D: 충돌을 감지하여 캐릭터가 땅에 닿았는지 확인.
5. 애니메이션 연동
1) Animator 설정
- Player 오브젝트에 Animator 컴포넌트를 추가합니다.
- Animator Controller를 생성하고 캐릭터의 애니메이션 클립을 설정합니다.
- Idle: 대기 애니메이션.
- Run: 이동 애니메이션.
- Jump: 점프 애니메이션.
2) 파라미터 추가
Animator Controller에서 다음 파라미터를 추가합니다:
- Speed: 이동 속도에 따라 애니메이션 전환.
- IsJumping: 점프 상태를 나타내는 불리언 값.
3) 스크립트에서 애니메이션 제어
private Animator animator;
void Start()
{
rb = GetComponent<Rigidbody2D>();
animator = GetComponent<Animator>();
}
void Update()
{
movement.x = Input.GetAxis("Horizontal");
// 애니메이션 파라미터 설정
animator.SetFloat("Speed", Mathf.Abs(movement.x));
animator.SetBool("IsJumping", !isGrounded);
if (Input.GetButtonDown("Jump") && isGrounded)
{
rb.AddForce(new Vector2(0f, jumpForce), ForceMode2D.Impulse);
isGrounded = false;
}
}
6. 추가 기능 구현
1) 대쉬(Dash) 기능
public float dashSpeed = 10f;
private bool isDashing = false;
void Update()
{
if (Input.GetKeyDown(KeyCode.LeftShift) && !isDashing)
{
StartCoroutine(Dash());
}
}
private IEnumerator Dash()
{
isDashing = true;
rb.velocity = new Vector2(transform.localScale.x * dashSpeed, 0f);
yield return new WaitForSeconds(0.2f); // 대쉬 지속 시간
isDashing = false;
}
2) 벽 점프(Wall Jump)
벽과의 충돌을 감지하고 반대 방향으로 점프하는 기능을 추가할 수 있습니다.
7. 요약
Unity에서 2D 캐릭터 컨트롤러는 입력, 물리 연산, 애니메이션 제어를 결합하여 플레이어 캐릭터의 다양한 동작을 구현합니다.
- Rigidbody2D와 Collider를 활용해 물리적 움직임을 처리.
- Input 시스템을 통해 사용자 입력을 감지.
- Animator를 활용해 시각적인 생동감 추가.
'Unity' 카테고리의 다른 글
Unity 3D 모델 가져오기 및 셰이더 (0) | 2024.12.10 |
---|---|
Unity 게임 오버 및 점수 시스템 (0) | 2024.12.09 |
Unity 2D 스프라이트 및 애니메이션 (0) | 2024.11.29 |
Unity 충돌 감지 및 트리거 (0) | 2024.11.28 |
Unity Rigidbody를 활용한 기본 물리 적용 (0) | 2024.11.28 |