본문 바로가기
Projects/RTS Craft

RTS-Craft, 3. 유닛(Unit) 구성

by Client. DJ 2022. 9. 24.
반응형

이러한 유닛들에게 정보를 심어줘야하는 과정이 필요하다.

유닛 구성

유닛을 구성하려면 3가지가 필요합니다.

  1. 유닛 이미지 리소스
  2. 유닛 스테이터스(Status) 데이터
  3. 유닛 움직임을 심어줄 Monobehaviour 클래스

1. 유닛 이미지 리소스

이전 게시물에서 다룬 아래와 같은 형태로 먼저 구성을 해줍니다.

프리팹으로 구성이 되어있다.

Sprite Renderer로 오브젝트의 이름을 "(Order in Layer 값).Sprite - Name" 형식으로 가시적으로 구성해주었습니다. 위의 이미지를 참고하여 구성합니다.

2. 유닛 스테이터스(Status) 데이터

우리가 사용할 수 있는 원시적인 데이터(Raw Data)가 필요합니다. 여기서 말하는 데이터는 단순하게 말하자면 "체력, 공격력, 방어력"과 같은 순수한 데이터를 의미합니다. 이러한 데이터 형식은 유니티의 ScriptableObject 클래스를 사용하여 제작합니다.

ScriptableObject 게시물: Unity, ScriptableObject 사용 예제

 

Unity, ScriptableObject 사용 예제

ScriptableObject란? 유니티에서 제공하는 기능으로, 하나의 데이터 폼을 만들 때 사용합니다. 주로 특정 스테이터스, 레벨 디자인 등에서 사용되고 있습니다. 예제 아래와 같이 하나의 폼을 작성합

moondongjun.tistory.com

1. 먼저 아래와 같이 분류해주어 "BaseStatusData" 스크립트를 생성합니다.

위의 경로에 생성해준다.

2. 스크립트를 아래와 같이 작성해줍니다.

BaseStatusData.cs

using UnityEngine;

[CreateAssetMenu(fileName = "BaseStatusData", menuName = "ScriptableObjects/BaseStatusData", order = 1)]
public class BaseStatusData : ScriptableObject
{
    /// <summary>
    /// 공격력
    /// </summary>
    public float damage;
    /// <summary>
    /// 체력
    /// </summary>
    public float maxHp;
    /// <summary>
    /// 방어력
    /// </summary>
    public float defence;
    /// <summary>
    /// 공격 속도
    /// </summary>
    public float attackSpeed;
    /// <summary>
    /// 이동 속도
    /// </summary>
    public float moveSpeed;
}

3. BaseStatusData를 생성해준다.

위와 같이 구성해준다.
ScriptableObject를 생성해준다.

아래와 같은 느낌으로 대응하여 제작해주면 됩니다. 앞으로 유닛이 하나씩 새로 생길 때마다, 대응되는 데이터를 생성해주면 되겠습니다.

데이터 사용의 예시

3. 유닛 움직임을 심어줄 Monobehaviour 클래스

이제까지 작업한 이미지 리소스와 데이터를 사용하게 해줄 클래스를 만들어줍시다.

1. 스크립트를 아래와 같은 경로에 생성을 줍니다.

2. 스크립트 작성을 해줍니다.

Unit.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Unit : MonoBehaviour
{
    #region Inspector

    public BaseStatusData baseStatusData;

    #endregion

    private void Awake()
    {

    }

    private void Update()
    {

    }
}

3. 유닛 프리팹을 아래와 같이 구성해준다.

프리팹에 컴포넌트(Unit.cs)를 달아주고, 스테이터스 데이터를 인스펙터에 넣었다.

완성

최종적으로 구성된 유닛의 내부 형태

마무리

유닛 형태 구성을 위해 조금 복잡한 과정들이었지만, 이렇게 구성을 해둔다면 추후 새로운 유닛을 쉽게 만들 수 있습니다. 이렇게 구조를 잘 만들어둔다면 앞으로의 과정들이 수월해집니다. 😁

반응형

댓글