forked from PorjectGame5/Royal-CloudBread
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Read Me.txt
47 lines (24 loc) · 4.4 KB
/
Read Me.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
변경점
1. 유닛 생산 방식 변경
생산해야 할 유닛의 데이터와 생산 주기를 GameController에서 관리하지 않고 각 타워에 부여되는 UnitGenerator에서 관리합니다. 이를 통해 각 타워마다 생산할 유닛의 리스트가 따로 관리되며, 타워를 추가할 때 GameController의 변경 없이 프리팹을 복사한 후 버튼과 슬라이더만 추가해서 연결해 주면 됩니다. 여기서 각 구성 요소들의 역할 및 변경점은 다음과 같습니다.
GameController: 생산 주기(resetTime)을 read only 타입으로 글로벌하게 사용할 수 있게 해주며, 한 타워가 활성화될 때 이미 활성화되어 있던 타워를 비활성화 시켜줍니다(setActive). UI에서 현재 활성화되어 있는 타워에 접근할 수 있게 해줍니다(getActiveGen)
UnitDataController: 생산할 수 있는 유닛의 리스트(unit), 한번에 총 생산알 수 있는 유닛 개수(maxUnitNum)와 유닛 종류수(unitKind)를 글로벌 영역에서 접근할 수 있게 해줍니다. index를 통해 유닛 프리팹에 접근할 수 있게 해줍니다(genUnitAt).
UnitGenerator: GameController에서 관리되던 생산해야 하는 유닛 리스트(genUnitList), 각 유닛의 개수와 총 생산 개수(genUnitNum, eachUnitNum), 생성까지 남은 시간(spentTime)등을 저장하여 타워별로 각각 관리합니다. 정해진 시간이 지나면 리스트에 저장된 프리팹 정보를 참조하여 유닛들을 일괄 생성하고(generateUnit) 상태를 초기화합니다. isActive가 true로 세팅되어야만 시간 갱신과 유닛 생산이 이루어집니다.
AIController: 적 타워에서 유닛을 생산합니다. 현재는 임의로 생산 시간(6초)이 한번 지날때 마다 생산하는 타워를 변경하며 생산하도록 설정했습니다. 생산할 수 있는 유닛은 enemyUnits에 저장되며, 각 유닛에 대한 weight(unitGenWeight)가 설정되어 weighted random으로 생산할 각 유닛이 결정됩니다. 그 외에 각 타워의 UnitGenerator 정보가 저장됩니다(enemyGenList).
2. UI 표시 방식 변경
UIManager: Slider가 respwanTimeShower에 의해 별도 관리되면서 유닛의 숫자를 표시하는 Text들만 관리합니다(unitDisplayer 배열). Singleton화시켜 글로벌 영역에서 접근 가능하게 변경했으며 Update로 상시 수정되던 것을 외부에서 호출이 있을 때만 변경하도록 수정했습니다(setUnitNumText).
TowerButton: assignedGen이라는 변수로 버튼이 할당된 타워를 참조하며, 버튼이 눌렸을 때 GameController에 이를 알리고(setGenActive) 해당 타워를 활성화시킵니다. 이후 UI에 표시되는 유닛 개수를 갱신합니다.
UnitPlusButton/UnitSubButton: GameController에서 활성화된 타워(UnitGenerator)를 얻어와(getActiveGen) 해당 UnitGenerator의 메소드(pushGenUnit, popGenUnit)를 통해 어떤 유닛을 추가/감소시켜야 하는지 전달합니다. 이는 UnitDataController에 저장된 해당 유닛의 index로 전달됩니다.
RespawnTimeShower: UnitGenerator에 의해 참조되며 생산까지 남은 시간이 변경될 때마다 이것이 UnitGenerator에서 여기로 전달됩니다(value). 이 값이 이 스크립트를 적용한 오브젝트의 하위에 있는 각종 UI요소(슬라이더, 텍스트 등)에 전달되어 화면을 갱신시킵니다. 현재는 슬라이더만 적용되어 있습니다.
3. 적 타워 및 적 유닛 프리팹 제작
Prefab/Enemies에서 확인하실 수 있습니다. 해골 검사/궁수와 타워를 제작했으며 능력치는 임의로 결정했습니다. 스크립트는 기존 스크립트와 동일하게 적용됩니다.
TODO
4. 유닛 및 타워가 공격받을 시 데미지 팝업이 뜨도록 하고, 타워 및 본진에 체력바를 제작할 예정입니다. 또한 선택된 타워가 구분될 수 있도록 위에 화살표를 띄울 예정입니다.
5. 화살히 향하는 방향을 가리키도록 할 예정이며, 간이로 적용한 마법사 및 적군 타워의 이펙트를 변경할 예정입니다.
11/18
변경점
1. Unit Generator Script가 더이상 타워에 할당되지 않으며 타워를 자식으로 갖는 Empty Object(Line n Generator)에 붙습니다. 해당 GameObject의 자식 오브젝트들이 유닛이 생산되는 Point를 제공하는 역할을 하며 자식 오브젝트에 할당된 6개의 Transform(Unit Generation Point n)가 유닛이 생산되는 지점이 됩니다. 따라서 타워가 파괴되도 데이터는 보존되며 후방에 있는 Generator(Castle x Generator)에서 생산이 시작됩니다. 이 지점에 본진을 만들면 본진에서 유닛이 생산되는 것처럼 보일 것입니다.
TODO: 타워가 파괴되도 버튼은 그대로 남습니다. Generator에서 버튼을 인식하게 해서 버튼의 x, y축을 새로운 Generation Point로 이동시켜 줄 필요가 있습니다.
2. Waypoint를 만들었습니다. 각 Waypoint는 부모-자식 형태로 구성되어 있고 한 지점에 일정 이상(현재 1.0f)가까이 가면 그 자식 지점을 waypoint로 삼게 됩니다.
3. 본진을 추가했고 본진에 적용되는 스크립트인 CastleBehaviour를 작성했습니다. 한번에 3개의 타겟을 공격하며 파괴될 경우 GameController의 gameOver 함수를 호출하여 게임 오버 화면과 알맞은 문구를 출력합니다. 패널과 텍스트는 public 함수로 GameController에서 참조하도록 했습니다.
4. Detector 오류를 발견하여 수정했습니다. 이제는 탐지한 적 리스트(enemyList)와 유닛에게 정보를 보낸 적 리스트(sentEnemyList)가 동시에 관리되며 이 둘에 모두 포함되지 않아야 새로 enemyList에 포함됩니다. sentEnemyList는 5초마다 한번씩 확인하여 파괴된 오브젝트들(null)을 제거합니다.