1 분 소요

Intro

  • 이번포스팅에서는 저번에 만든 캐릭터를 사용자 입력에따라 움직이고, 그에맞는 애니메이션을 붙여주고자합니다.

바닥(Ground)

  • 먼저 캐릭터가 딛고있을 바닥을 만들어주었습니다.

  • 간단하게 3D Obj - Cube 를 얇고 넓게 펼쳐준 뒤, 텍스쳐를 입혀주었습니다.

image

캐릭터 물리, 충돌

  • 캐릭터는 중력의 영향을 받을것이며 바닥이나 벽같은 여러 요소들과 충돌을 파악할 수 있어야합니다.

  • 캐릭터 오브젝트에 Rigidbody와 CapsuleCollider 컴포넌트를 붙여주었습니다.

  • 콜라이더를 캐릭터에 알맞게 설정해야 좋은 조작감을 느낄 수 있습니다.

image

캐릭터에 필요한 기능들

RPG 에서 캐릭터는 굉장히 많은 기능들을 수행합니다.

사용자의 키 입력을 받아 공격, 오브젝트와 상호작용, 여러 UI 조작 등등..

따라서 나중에 관리하기쉽도록 각 기능들을 큰 덩어리로 나누어놓는것이 좋습니다.

  • 간단하게 아래 그림과같이 필요한것들을 생각해봤습니다.
    1. 플레이어의 정보를 저장할 기능
    2. 사용자의 키 입력을 처리할 기능
    3. 입력에 따른 캐릭터의 움직임을 처리할 기능

image

사용자 입력처리

  • 사용자 입력처리를 위한 스크립트 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를 통해 움직임을 구현했습니다.

image

애니메이션 추가

  • 캐릭터가 움직일때 뛰어가는 애니메이션을 추가했습니다.

image

댓글남기기