Unity 5.02로 '유니티 2D 디펜스 게임은 이렇게 만든다' 따라하기.

18/9/3 월

* 적들이 미리 지정한 웨이포인트 따라 이동하게 처리 1(수동방식):
빈게임오브젝트 생성, 'waypoint1'이라 명명. 이동하며 적당한 위치의 x,y좌표 측정.
'GameManager.cs' 새로 생성, 빈게임오브젝트 'GameManager'라 명명하여 추가.
'EnemyCtrl.cs'에 GameManager.waypoints를 참조하는 코드와 FixedUpdate()로 계속 다음 웨이포인트를 향해 이동하는 코드 추가.
기존 Enemy.prefab의 구조가 문제가 되어 구조변경: Rigidbody2D, Box Collider2D, EnemyCtrl.cs는 상위에, Sprite Renderer, Animator는 자식에 배치하고 EnemyCtrl.cs 에서 Animator 참조시
animator = GetComponent<Animator> ();에서
animator = gameObject.transform.GetChild(0).GetComponent<Animator> ();로 변경.
기본적인 작동이 구현되다.

* 적들이 미리 지정한 웨이포인트 따라 이동하게 처리 2(동적방식):
빈게임오브젝트 생성, 'waypoint'이라 명명, 'Waypoint.cs' 생성, 코드 작성하여 추가. 맨 마지막을 제외한 각각 nextWaypoint에 다음 웨이포인트를 드래그하여 연결.
'GameManager.cs'에 firstWaypoint 변수 추가하고 첫번째 웨이포인트 드래그하여 연결.
'EnemyCtrl.cs'에 동적 웨이포인트용 코드 추가하고 isDynamicWaypoint 불 변수 추가하여 동적/수동 웨이포인트 선택가능하게 처리.

FlashMX에서 하트, 동전 모양 그려서 불러들이고 이전 텍스트 처리되어있던 Health, Coin을 이미지로 바꾸고 이전 Healthbar.cs에 통합되어있던 코인양 변경 처리를 CoinMeter.cs로 따로 분리시켜내다.

* 탑 구입/매각/업그레이드 처리:
부모용 추상 클래스인 'TradeTower.cs'를 생성, 각각 구입/매각/업그레이드 처리를 담당하는 'TradeTowerBuy.cs', 'TradeTowerSell.cs', 'TradeTowerUpgrade.cs' 생성, 코드 작성.
FlashMX에서 업그레이드, 매각 그림 모양 그려서 불러들이기.

* 타워 드래그로 배치하기:
GameManager에 BoxCollider2D를 여러개 추가한 뒤 탑 배치 가능지역을 만들기.
탑을 배치하는 'TowerPlace.cs' 새로 생성, 코드 작성. 'Tower.cs'에 OnMouseDown() 추가하여 클릭시 액티브타워로 지정하여 업그레이드, 매각이 가능하게 처리.
몇가지 오류를 잡아 드래그로 설치 가능지역에 탑 설치, 업그레이드, 매각이 모두 제대로 작동한다.

- 헬스바가 제대로 작동 안해 Start() 함수에서 fillingImage = GetComponentInChildren<Image> (); 로 찾는 방식을 public Image fillingImage;로 변수를 public화 하고 줄어들 빨간바 이미지를 드래그해 적용하는 방식으로 고치다.

FlashMX에서 승리/패배 화면 그려서 불러들이기.

* 적 스폰 처리:
책에 나온 WaitUntil()함수가 5.2에 없는 것이어서 고전중. While을 사용한 이전 방식대로 해봤는데 잘 안되고 있다.
-해결: while (!waveWin) { yield return null; }를 사용하는 방식으로 순차적 실행에 성공하다.

* 스테이트 머신 비헤이비어를 활용한 적 제거 처리:
'DestroyOnExit.cs' 생성, 아래처럼 특수한 StateMachineBehaviour를 상속받고 OnStateExit() 함수를 오버라이드하여 애니메이션이 나갈 때 게임 오브젝트 제거하게 처리.
public class DestroyOnExit : StateMachineBehaviour {
override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex){
//애니메이터에 어태치된 게임오브젝트 제거
Destroy (animator.gameObject);
}}

- 그럭저럭 작동되는데 뭔가 좀 꼬인듯 웨이브 수가 많아질수록 에러들이 많이 생기고 느려진다.