상점
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));
}챌린지
중급클릭으로 건설할 타워를 선택하는 상점을 추가하세요.
BuildManager에서towerPrefab을 직렬화된Tower[] shop,Button[] shopButtons,Color chosenColor로 바꾸고private Tower chosen;을 추가하세요.Start에서 각 버튼에prefab.data.towerName + "\n" + prefab.data.cost를 표시하고 클릭하면Choose(prefab)을 호출하게 하세요. 그런 다음Choose(shop[0])을 호출하세요.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 플레이그라운드