Menu
CoddyTech

상점

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

타워가 두 개라면 플레이어에게 상점이 필요합니다. 상점은 데이터에서 직접 만들어집니다. 각 타워 프리팹마다 버튼에 이름과 가격이 표시되고, 버튼을 클릭하면 다음 패드에 배치할 타워를 선택합니다. 화면 아래쪽의 ShopPanel에는 버튼 두 개가 있습니다.

반복문에서 만든 버튼에는 람다를 사용해 그 자리에서 리스너를 추가합니다. 람다는 변수의 값이 아니라 변수를 캡처합니다. for 반복문은 모든 반복에서 i 하나를 공유하므로, 반복문이 끝난 뒤 클릭하면 모든 람다가 반복문이 끝난 후의 i를 읽습니다. 반복문 안에서 선언한 지역 변수는 반복할 때마다 새로 만들어지므로, 먼저 값을 복사합니다.

for (int i = 0; i < levels.Length; i++)
{
    LevelData level = levels[i];
    levelButtons[i].onClick.AddListener(() => Load(level));
}
challenge icon

챌린지

중급

클릭으로 건설할 타워를 선택하는 상점을 추가하세요.

  1. BuildManager에서 towerPrefab을 직렬화된 Tower[] shop, Button[] shopButtons, Color chosenColor로 바꾸고 private Tower chosen;을 추가하세요.
  2. Start에서 각 버튼에 prefab.data.towerName + "\n" + prefab.data.cost를 표시하고 클릭하면 Choose(prefab)을 호출하게 하세요. 그런 다음 Choose(shop[0])을 호출하세요.
  3. Choose에서 타워를 저장하고 해당 버튼은 chosenColor로, 나머지 버튼은 흰색으로 물들이세요. chosen.data.cost만큼 비용을 지불해 chosen을 건설하세요.

‘플레이’를 눌러 두 종류를 모두 건설하세요. 그런 다음 ‘확인’을 누르세요.

직접 해보기

using UnityEngine;
using UnityEngine.InputSystem;

public class BuildManager : MonoBehaviour
{
    [SerializeField] private GameManager game;
    [SerializeField] private Tower towerPrefab;

    void Update()
    {
        if (!Mouse.current.leftButton.wasPressedThisFrame)
        {
            return;
        }

        Ray ray = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue());
        if (Physics.Raycast(ray, out RaycastHit hit) && hit.collider.TryGetComponent(out BuildPad pad))
        {
            Build(pad);
        }
    }

    void Build(BuildPad pad)
    {
        if (pad.tower != null)
        {
            return;
        }

        if (!game.TrySpend(towerPrefab.data.cost))
        {
            Debug.Log("Not enough money");
            return;
        }

        pad.tower = Instantiate(towerPrefab, pad.transform.position, Quaternion.identity);
    }
}

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

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