Menu
CoddyTech

적 데이터

Coddy의 Unity 게임: 타워 디펜스 코스 레슨. 18개 중 2번째.

타워 디펜스 게임에는 잡졸, 빠른 주자, 느린 탱크 등 여러 종류의 적이 있습니다. 모든 잡졸은 같은 속도로 걷고 같은 체력으로 시작하므로, 이 수치는 개별 적이 아니라 종류에 속합니다. 종류마다 하나씩 ScriptableObject 에셋에 저장하고, 해당 종류의 모든 적이 그 에셋을 참조합니다. 에셋을 변경하면 해당 종류의 모든 적도 함께 바뀝니다.

에셋에는 개별 적의 상태를 담아서는 안 됩니다. 공격을 받은 잡졸은 뒤에 있는 잡졸보다 체력이 적으므로, 에셋에는 잡졸이 시작할 때의 체력인 maxHealth를 저장하고, 각 적은 이를 자기 필드에 복사합니다. 레이싱 게임에서도 자동차를 같은 방식으로 분리합니다:

[CreateAssetMenu(fileName = "NewCar", menuName = "Racing/Car Data")]
public class CarData : ScriptableObject
{
    public float topSpeed = 30f;
    public float tankSize = 50f;
}

public class Car : MonoBehaviour
{
    public CarData data;
    private float fuel;

    void Awake()
    {
        fuel = data.tankSize;
    }
}

같은 모델의 모든 자동차는 하나의 CarData를 공유하고, 각 자동차는 각자의 fuel을 소비합니다. 대신 data.tankSize -= used라고 작성하면 해당 모델의 모든 자동차 연료 탱크가 한꺼번에 비워지고, Editor에서는 Play가 끝난 뒤에도 변경 사항이 에셋에 남습니다. Awake는 객체가 생성되는 즉시 실행되므로, 복사된 값은 무엇이든 사용하기 전에 준비됩니다.

challenge icon

챌린지

쉬움

Runner가 Grunt에 합류합니다. 더 빠르지만 체력은 더 적습니다. 각 종류마다 고유한 에셋을 만드세요.

  1. EnemyData.cs에서 Create 메뉴를 통해 EnemyData를 만들 수 있도록 하고, 메뉴 이름을 Tower Defense/Enemy Data로 지정한 다음, public 필드 speed(float), maxHealth 및 reward(int)를 추가하세요.
  2. Enemy.cs에서 speed 필드를 EnemyData 타입의 public 필드 data로 바꾸고, data.speed로 이동하게 하세요.
  3. private int health를 추가하고, Awake에서 에셋의 maxHealth 값으로 설정하세요.

프로젝트에는 GruntData 에셋(speed 2, health 9, reward 5)과 RunnerData 에셋(speed 3.5, health 5, reward 3)이 있으며, Inspector에서 각 적에게 고유한 에셋을 지정합니다. Play를 눌러 Runner가 Grunt를 앞지르는 모습을 지켜본 다음 Check를 누르세요.

직접 해보기

using UnityEngine;

// 나중에 추가: 한 종류의 적 능력치를 에셋으로 저장합니다.
public class EnemyData : ScriptableObject
{
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Unity 게임: 타워 디펜스의 모든 레슨