유니티 Unity/액션게임만들기

[UNITY] 유니티로 2D 액션 게임 만들기 2 (플레이어 캐릭터 만들기 2 / 캐릭터 이동)

Dunhill6mg 2025. 3. 25. 15:11
반응형

 

 

유니티로 2D 액션 게임 만들기 3번째 포스팅으로 이번에는 캐릭터의 이동 조작에 대해 남겨본다.



** 지난 포스팅은 플레이어 캐릭터 만들기
https://ggbt.tistory.com/13

 

[UNITY] 유니티로 2D 액션 게임 만들기 2 (플레이어 캐릭터 만들기 1)

지난 포스팅에 이은 두번째, 플레이어 캐릭터 만들기.  ** 지난 포스팅 - 맵 만들기 ** [UNITY] 유니티로 2D 액션 게임 만들기 1유니티로 만들어보는 2D 액션 게임, 그 첫번째 시간.액션 게임 만들기

ggbt.tistory.com

 

​지난 포스팅에서 생성한 캐릭터 오브젝트에 스크립트 컴포넌트를 붙여서 방향키를 눌러 캐릭터가 움직이는 것을 만들어보고자 한다.
이번 포스팅에서는 캐릭터의 상하좌우 이동에 대해서만 작성한다.
그리고 다음에는 공격이나 대시 같은 액션 동작을 만들어 볼 예정.

 


 





유니티로 2D 액션 게임 만들기

캐릭터의 이동 동작 구현

 


PlayerMovement.cs 스크립트 파일 생성


먼저 캐릭터의 이동을 동작하게 만들어줄 스크립트를 작성해야 한다.
프로젝트 창에서 마우스오른쪽 클릭 > Create > C# Script .


파일명은 PlayerMovement.cs 로 지어주었다.
생성한 파일은 Player 게임오브젝트에 컴포넌트로 추가해주자.


그리고 스크립트는 아래와 같이 작성해준다.


using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public Transform playerTr;

    public float moveSpeed = 1f;


    private void Start()
    {
        playerTr = transform;
    }

    private void Update()
    {
        float horizontal = Input.GetAxis("Horizontal");
        float horizontalRaw = Input.GetAxisRaw("Horizontal");

        float vertical = Input.GetAxis("Vertical");
        float verticalRaw = Input.GetAxisRaw("Vertical");

        if(horizontal != 0f || vertical != 0f)
        {
            playerTr.position += new Vector3(horizontal, vertical, playerTr.position.z) * moveSpeed * Time.deltaTime;
        }
    }

}

 


 


playerTr 은 Player 게임오브젝트를 움직일 때 사용하기 위해 트랜스폼을 할당해 줄 변수다.
캐릭터를 이동하는데 있어서 굳이 playerTr 이라는 Transform 변수를 만들어주지 않아도 되지만, 그냥 넣어봤다.

Update() 문에서,
float horizontal, float vertical 변수는 사용자의 상하좌우 입력을 받기 위해 생성한 변수이다.​

유니티의 사용자 입력 관련한 내장함수에는 
Input.GetAxis 와 Input.GetAxisRaw 라는 것이 있다.

그리고 각 함수에는 매개변수로 string 문자열을 넣어야 하는데,
여기에 가로 세로를 뜻하는 "Horizontal", "Vertical" 을 넣어서 가로/세로 입력을 받아 사용할 수 있다.

가로 세로 입력은 Project Settings 에서 확인할 수 있다.



가로 입력의 경우,
키보드의 A, D 또는 방향키 좌/우 를 누르면 입력 처리가 되고,​

세로 입력의 경우,
키보드의 W, S 또는 방향키 상/하 를 누르면 입력 처리가 된다.​

각 키를 누르면,
float horizontal, float vertical 에 float 값이 할당된다.

여기에서 참고할 점은,​

GetAxis 의 경우, 키 입력 시 float 값이 0 에서 값이 점차 증가하여 최종값을 1로 출력하게 되고 
(위, 오른쪽 키 입력 시 양수 / 아래, 왼쪽 키 입력 시 음수)

GetAxisRaw 의 경우, 키 입력 시 float 값이 바로 1로 출력되게 된다.
GetAxis 처럼 점차 증가하는 것이 아니라 키 입력 시에는 1, 미입력 시에는 0 으로 즉시 값이 변한다.​

아래와 같이 Debug 코드를 넣어서 테스트해보자.


콘솔 창을 보면 GetAxis 는 소수점, GetAxisRaw 는 정수로 표시되는 것을 확인할 수 있다.​

소스코드에는 horizontal, horizontalRaw 처럼 Raw 까지 같이 작성했는데, 둘 중 하나만 사용하면 된다.
(여기서는 GetAxis 로 진행)​

그리고 아래 코드가 캐릭터를 움직여주는 코드.​

if (horizontal != 0f || vertical != 0f)
{
      playerTr.position += new Vector3(horizontal, vertical, playerTr.position.z) * moveSpeed * Time.deltaTime;
}​

horizontal, vertical 의 값이 0 인 경우는 키입력이 없을 때이다.
0 이 아닌 경우라면 키를 입력했다는 뜻이 되므로, 키입력이 되면 if문 안의 내용이 실행된다.​

playerTr.position 은 캐릭터의 현재 위치를 뜻하는데,
여기에 += 로 새로운 방향값(new Vector3)을 더해줌으로써 캐릭터를 이동하게 되는 것이다.​

new Vector3 에는 3개의 방향값이 들어가는데, x y z 의 방향값이다.
2D 게임에서는 z 축 방향이 의미가 없기 때문에 playerTr  자체의 z 값을 줬고,
x 에는 horizontal 의 값을, y 에는 vertical 의 값을 줘서 상하좌우의 값에 따라 캐릭터가 이동되도록 했다.

 

 

Apple 2024 맥북 프로 14 M4 - 노트북 | 쿠팡

현재 별점 4.9점, 리뷰 314개를 가진 Apple 2024 맥북 프로 14 M4! 지금 쿠팡에서 더 저렴하고 다양한 노트북 제품들을 확인해보세요.

www.coupang.com

* 쿠팡파트너스활동을 통해 일정 수수료를 받을 수 있음

 

 

 


캐릭터 움직여보기


여기까지 하고 게임을 실행해보자.
WSAD 또는 방향키를 눌러보면 화면의 캐릭터가 이동하는 것을 볼 수 있다.​




캐릭터 이동은 여기서 끝.
다음 번엔 대시나 공격 등의 액션 동작을 만들어보자.


끝.

반응형