[UNITY] 유니티로 2D 액션 게임 만들기 2 (플레이어 캐릭터 만들기 2 / 캐릭터 이동)
유니티로 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 또는 방향키를 눌러보면 화면의 캐릭터가 이동하는 것을 볼 수 있다.
캐릭터 이동은 여기서 끝.
다음 번엔 대시나 공격 등의 액션 동작을 만들어보자.
끝.