[타워디펜스게임] #6. 전체 cost 구현

치치·2024년 12월 31일
0

타워디펜스게임

목록 보기
6/18
post-thumbnail

✅ 오늘의 목표 !

  • 전체 cost : 임시로 3초마다 cost가 5씩 늘어나게 하고, 최대 50까지

  • 유닛이 배치되면 유닛의 cost값 만큼 전체에서 차감

  • 전체cost가 유닛의 cost값보다 적으면 배치될 수 없게 함

  • TextMeshProUGUI를 사용하여 변동사항을 string으로 적용




📌 Cost 스크립트

Cost 스크립트에서는 cost가 3초마다 5씩 증가하게 되는 코드를 작성하였다
-> 유닛을 구매하면 코스트가 차감되는 건 static으로 선언했기에 다른 스크립트에 작성하였음

  • 전체 cost는 정적으로 생성하여 누적되게 사용하는 것이 좋을 거 같았다

  • static으로 선언한 totalCost 변수

  • Text 타입의 totalcost, TextMeshProUGUI 타입의 totalCostText
  • 몇초마다 코스트가 증가하는 코드를 짜기 위해서 coroutine을 사용하였다
  • 코루틴(Coroutine) : Update( )문 밖에서도 반복적으로 실행해야할 로직이 있을때 사용 가능한 방법

    -> 내가 코루틴을 사용한 이유는, cost가 3초에 한번씩 5만큼 증가하게 짜고싶었기 때문이다

    -> 3초마다 함수가 실행되어야함

    ->yield return new WaitForSeconds( float ); 사용
    -> 매개변수로 들어온 값만큼 기다렸다가 코드 실행
  • UpdateUI( )함수에서 누적된 totalCost로 바꿔주었다


📌 UnitSlot 스크립트

  1. UnitSlot 스크립트는 해당하는 위치의 유닛을 클릭하면 해당 유닛의 코스트만큼 전체 코스트에서 차감하여 구매
  2. 유닛 구매창의 유닛 스프라이트 활성화 시키기
  • Start( )쪽에서는 타일매니저의 스크립트를 가져온다 -> 타일매니저 스크립트의 함수를 사용하기 위해서
  • 유닛 게임오브젝트에 부착되어있는 버튼 컴포넌트에 BuyUnit 함수를 적용시킨다
public class UnitSlot : MonoBehaviour
{


    public Sprite unitSprite; // 유닛 이미지

    public GameObject unitObject; // 유닛 객체

    public Image icon; // 유닛 이미지

    public int costco;

    public TextMeshProUGUI costText;

    // GameManager 스크립트
    private TileManager tileManager;

    // UnitStat 스크립트
    private UnitStat unitStat;

    private Cost Cost;

    private void Start()
    {
        tileManager =
            GameObject.Find("TileManager").GetComponent<TileManager>();
        
            GetComponent<Button>().onClick.AddListener(BuyUnit);

    }

📌 UnitSlot - BuyUnit( )함수

  • 타일매니저의 BuyUnit함수를 실행하여 유닛을 구매하면 전체 코스트에서 선택된 유닛의 코스트(costco)만큼 차감되도록 하였다

  • 게임씬에서 확인하기 위해 text를 totalCost.ToString( )으로 갱신시켰다

  • ✅ToString( )

// 유닛 구매
    private void BuyUnit()
    {
        // totalcost > Unit.cost 일때만 실행
        if (costco <= Cost.totalCost)
        {
            
            tileManager.BuyUnit(unitObject, unitSprite);

            // 전체 cost에서 각각의 유닛 차감
            Cost.totalCost -= costco;

            // Hierarchy창에서 Total_Cost_Text 오브젝트 찾아서 코스트 갱신
            GameObject.Find("Total_Cost_Text").GetComponent<TextMeshProUGUI>().text =
            Cost.totalCost.ToString();

        }
        else
        {
            Debug.Log("No Create");
        }
      

        // Debug.Log(Cost.totalCost);

    }

profile
뉴비 개발자

0개의 댓글