Menu
CoddyTech

타워 디펜스 라이트

Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 64개 중 61번째.

스크립트 두 개를 작성하세요. 에셋 유형인 TowerData와 Tower입니다. Creep, Bolt, CreepSpawner는 준비되어 있으며, 타워의 Nearest와 Show도 준비되어 있습니다.

challenge icon

챌린지

어려움

타워를 완성하세요. Nearest(range)와 Show()는 준비되어 있습니다.

  1. TowerLevel: 직렬화 가능하며, range, fireEvery, damage, cost는 public입니다. TowerData에는 public List<TowerLevel> levels가 있습니다.
  2. fireEvery초마다 Nearest(range)가 크립을 찾으면, 타워 위치에 ObjectPool<Bolt>에서 가져온 볼트를 배치하세요: bolt.Launch(creep, damage, pool.Release).
  3. Creep.Killed 이벤트 후 현상금을 지급할 때와 스페이스 키를 눌러 cost만큼 지불하고 다음 레벨을 구매한 후에 Show()를 호출하고, Tower level 2를 로그에 기록하세요.

‘플레이’를 누르고 업그레이드하세요. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Pool;
using TMPro;

public class Tower : MonoBehaviour
{
    [SerializeField] private TowerData data;
    [SerializeField] private Bolt boltPrefab;
    [SerializeField] private TMP_Text infoText;

    private int level;
    private int gold;

    // 준비됨: 사거리 내에서 탑과 가장 가까운 creep을 반환하며, 없으면 null을 반환합니다.
    Creep Nearest(float range)
    {
        Creep nearest = null;
        float best = Mathf.Infinity;
        foreach (Collider hit in Physics.OverlapSphere(transform.position, range))
        {
            if (hit.TryGetComponent(out Creep creep))
            {
                float distance = Vector3.Distance(transform.position, creep.transform.position);
                if (distance < best)
                {
                    best = distance;
                    nearest = creep;
                }
            }
        }
        return nearest;
    }

    // 준비됨: 레벨과 골드를 Level 1, 0 gold 형식으로 표시합니다.
    void Show()
    {
        infoText.text = "Level " + (level + 1) + ", " + gold + " gold";
    }
}

Unity 게임 아키텍처의 모든 레슨

직접 연습해 보세요: Unity 플레이그라운드