유니티 RPG - 2. 캐릭터 움직임 구현
Intro
- 이번포스팅에서는 저번에 만든 캐릭터를 사용자 입력에따라 움직이고, 그에맞는 애니메이션을 붙여주고자합니다.
바닥(Ground)
-
먼저 캐릭터가 딛고있을 바닥을 만들어주었습니다.
-
간단하게 3D Obj - Cube 를 얇고 넓게 펼쳐준 뒤, 텍스쳐를 입혀주었습니다.
캐릭터 물리, 충돌
-
캐릭터는 중력의 영향을 받을것이며 바닥이나 벽같은 여러 요소들과 충돌을 파악할 수 있어야합니다.
-
캐릭터 오브젝트에 Rigidbody와 CapsuleCollider 컴포넌트를 붙여주었습니다.
-
콜라이더를 캐릭터에 알맞게 설정해야 좋은 조작감을 느낄 수 있습니다.
캐릭터에 필요한 기능들
RPG 에서 캐릭터는 굉장히 많은 기능들을 수행합니다.
사용자의 키 입력을 받아 공격, 오브젝트와 상호작용, 여러 UI 조작 등등..
따라서 나중에 관리하기쉽도록 각 기능들을 큰 덩어리로 나누어놓는것이 좋습니다.
- 간단하게 아래 그림과같이 필요한것들을 생각해봤습니다.
- 플레이어의 정보를 저장할 기능
- 사용자의 키 입력을 처리할 기능
- 입력에 따른 캐릭터의 움직임을 처리할 기능
사용자 입력처리
-
사용자 입력처리를 위한 스크립트 PlayerInput.cs 를 생성했습니다.
-
여기에서 먼저 좌우이동을 위한 키입력을받습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerInput : MonoBehaviour
{
public float hAxis;
public float vAxis;
private void Update()
{
GetInput();
}
// 사용자 입력
private void GetInput()
{
hAxis = Input.GetAxisRaw("Horizontal");
vAxis = Input.GetAxisRaw("Vertical");
}
}
플레이어 정보
-
플레이어 정보를 저장할 스크립트 PlayerInfo 를 작성했습니다.
-
현재는 이동속도(speed)만 존재합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerInfo : MonoBehaviour
{
public float speed = 1f;
}
플레이어 움직임구현
- 플레이어를 움직이는것은 PlayerController 스크립트에서 담당합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
[SerializeField] private PlayerInput playerInput;
[SerializeField] private PlayerInfo playerInfo;
private Vector3 moveVec;
private Rigidbody rigid;
private void Awake()
{
rigid = GetComponent<Rigidbody>();
}
private void Update()
{
Move();
}
void Move()
{
moveVec = new Vector3(playerInput.hAxis, 0, playerInput.vAxis).normalized;
rigid.position += moveVec * playerInfo.speed * Time.deltaTime;
}
}
-
PlayerInput, PlayerInfo 스크립트의 변수를 가져와야하므로 SerializeField 키워드를 사용했습니다.
-
Rigidbody를 통해 움직임을 구현했습니다.
애니메이션 추가
- 캐릭터가 움직일때 뛰어가는 애니메이션을 추가했습니다.
댓글남기기