ํ•ด๋‹น ์˜์ƒ 09:57์—ย ์นœ ์ฝ”๋“œ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋˜๋Š”๊ฑฐ ๊ฐ™์€๋ฐ ํ•œ๋ฒˆ ๋ด์ฃผ์„ธ์š”

๊ทผ๋ฐ ์˜์ƒ์ด๋ž‘ ๋˜‘๊ฐ™์ด ์น˜๋Š”๋ฐ ์ €๋งŒ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋„ค์š”

https://youtu.be/fkJW925pn9I?si=n9GAXNUlAI8TFIgI

[Unity 2D Game] Tower Defense #07 - ํƒ€์›Œ ๋ฐฐ์น˜ ์‹œ์Šคํ…œ์œ ๋‹ˆํ‹ฐ ์—”์ง„์„ ์ด์šฉํ•ด 2D Tower Defense ๊ฒŒ์ž„์„ ์ œ์ž‘ํ•˜๋Š” ๋™์˜์ƒ์ž…๋‹ˆ๋‹ค.In this video you will learn how to create 2D Tower Defense game with Unity3D Engine.โ†“โ†“โ†“โ†“โ†“โ†“โ†“โ†“โ†“โ†“โ†“โ†“โ†“โ†“โ†“โ†“00:00 Intro...youtu.be


์•„๋ž˜๋Š” ์ „์ฒด ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค


using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.SubsystemsImplementation;


public class TowerSpawner : MonoBehaviour

{

ย  ย  [SerializeField]

ย  ย  private TowerTemplate towerTemplate;

ย  ย  [SerializeField]

ย  ย  private EnemySpawner enemySpawner;

ย  ย  [SerializeField]

ย  ย  private PlayerGold playerGold;

ย  ย  [SerializeField]

ย  ย  private SystemTextViewer systemTextViewer;

ย  ย  private bool isOnTowerButton = false;

ย  ย  private GameObject followTowerClone = null;


ย  ย  public void ReadyToSpawnTower()

ย  ย  {

ย  ย  ย  ย  if(isOnTowerButton == true)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  return;

ย  ย  ย  ย  }


ย  ย  ย  ย  if (towerTemplate.weapon[0].cost > playerGold.CurrentGold)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  systemTextViewer.PrintText(SystemType.Money);

ย  ย  ย  ย  ย  ย  return;

ย  ย  ย  ย  }


ย  ย  ย  ย  isOnTowerButton = true;


ย  ย  ย  ย  followTowerClone = Instantiate(towerTemplate.followTowerPrefab);


ย  ย  ย  ย  StartCoroutine("OnTowerCancelSystem");

ย  ย  }

ย  ย ย 

ย  ย  public void SpawnTower(Transform tileTransform)

ย  ย  {

ย  ย  ย  ย  if(isOnTowerButton == false)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  return;

ย  ย  ย  ย  }


ย  ย  ย  ย  Tile tile = tileTransform.GetComponent<Tile>();


ย  ย  ย  ย  if(tile.IsBuildTower == true)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  systemTextViewer.PrintText(SystemType.Build);

ย  ย  ย  ย  ย  ย  return;

ย  ย  ย  ย  }


ย  ย  ย  ย  isOnTowerButton = false;


ย  ย  ย  ย  tile.IsBuildTower = true;


ย  ย  ย  ย  playerGold.CurrentGold -= towerTemplate.weapon[0].cost;


ย  ย  ย  ย  //ํƒ€์›Œ๊ฐ€ z์ถ•์—์„œ ์•ž์œผ๋กœ ์„ค์น˜๋˜๊ฒŒ ํ•จ

ย  ย  ย  ย  Vector3 position = tileTransform.position + Vector3.back;

ย  ย  ย  ย  GameObject clone = Instantiate(towerTemplate.towerPrefab, position, Quaternion.identity);

ย  ย  ย  ย  //ํƒ€์›Œ ๋ฌด๊ธฐ์— enemySpanwer ์ •๋ณด ์ „๋‹ฌ

ย  ย  ย  ย  clone.GetComponent<TowerWeapon>().Setup(enemySpawner, playerGold, tile);


ย  ย  ย  ย  Destroy(followTowerClone);


ย  ย  ย  ย  StopCoroutine("OnTowerCancelSystem");

ย  ย  }


ย  ย  private IEnumerator OnTowerCancelSystem()

ย  ย  {

ย  ย  ย  ย  while(true)

ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  if(Input.GetKeyDown(KeyCode.Escape) || Input.GetMouseButton(1))

ย  ย  ย  ย  ย  ย  {

ย  ย  ย  ย  ย  ย  ย  ย  isOnTowerButton = false;


ย  ย  ย  ย  ย  ย  ย  ย  Destroy(followTowerClone);

ย  ย  ย  ย  ย  ย  ย  ย  break;

ย  ย  ย  ย  ย  ย  }

ย  ย  ย  ย  }

ย  ย  ย  ย  yield return null;

ย  ย  }

}