'마녀:귀찮아!' DevLog v0.0.4
머리말
v0.0.4의 목표는, 모험가 길드
Concept을 만드는 것.
모험가 길드
- VillageReputationExp, VillageReputationLevel GameStat 추가
UI
UIItemEquipPopup
Item 획득 시 뜨는 Popup UI를 꾸몄다.
Item 획득 시 이전에 띄운 Popup UI가 사라지지 않고 좀 더 오래 유지되도록 만들었다.
여러 Item을 연속으로 먹으면 계속 사리지지 않고 유지되는 식.
물론 화면을 꽉 채우면 좀 이상하니, 특정 수를 넘어가면 몇 개는 사라지도록 만들었다.
Item 획득 Pop 여러 개가 한 번에 화면 오른쪽에 떠있는게, 뭔가 획득 피드백 상 좋은 것 같아서 그렇게 만들었다.
GamePix님이 만들고 계시는 게임의 Screenshot을 참고했다.
DOTween을 이용해서 구현했다.
UI Refactoring
UI 구조를 Refactoring 했다.
- IUI -> UIBase (Interface -> Abstract Class)
- ‘명시적 인터페이스 구현’을 공부해보려고 했는데, Unity에서 못쓰는 듯?
- C# 8.0 기능이고, Unity 6는 9.0 쓰긴하는데, 이 기능은 지원 안하는 것 같다
- ‘Unity Documentation (6)’: ‘C# compiler’
- ‘Unity Documentation (2020.3)’: ‘C# compiler’
- UIBase.OnOpen() OnClose()
- Init 구조 통일화 (매개변수 X, isInit X)
- UIPanels Refactoring
- UIUtil 추가 (CanvasGroup.SetVisible(~))
- UICraftPanel 추가
- UILayoutInitializer 추가
- 일부 Prefab 추가
- 일부 File/Folder 계층구조 변경
- UIPanels
transform.GetChild
<- 이것도 비활성화된 GameObject 못 찾는지 몰랐네GetComponentsInChildren
로 긁어오고, LINQ Select으로 transform.root가 현재 this.gameObject인 것만 필터링 했다.
바꾸니까 제대로 동작하지 않는 UI들이 많았다.
내가
Grid, Building
건물 배치 정보를 저장하는 기능을 만들었다.
각 WorldStage 별로 건물이 다르게 배치되기 때문에, 저장 정보는 WorldStage에 저장하도록 했다.
- Grid -> Build / Building
WorldStage에 직접 BuildingSaveData를 넣지는 않았고, WorldStageSaveData로 한 번 Wrapping 했다.
나중에 WorldStage에 저장될 정보가 더 있을 것 같아서다.
Grid 기능에 사용된 Shader와 초기 기반 작성에 ‘Sunny Valley Studio’: ‘Grid Placement System in Unity 2022’을 참고했다.
처음엔 Grid를 십자 모양의 격자로 만들었는데, Cult of The Lamb
의 대각 모양 Grid가 이쁜 것 같아 그렇게 바꿨다.
DataSOWindow
ScriptableObject들을 관리하는 DataSOWindow CustomEditor.
기존에는 MDataSO
라는 이름이었는데, DataSOWindow
로 바꿨다.
DataSOUtil
새로 Util Class를 만들었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 에셋 검색 시작
string[] guids = AssetDatabase.FindAssets("t:DataSO", new[] { BASE_DIR });
// 진행 상황 표시
EditorUtility.DisplayProgressBar($"{taskName} 중", "DataSO 에셋을 처리하고 있습니다", 0f);
for (int i = 0; i < guids.Length; i++)
{
string guid = guids[i];
string path = AssetDatabase.GUIDToAssetPath(guid);
DataSO dataSO = AssetDatabase.LoadAssetAtPath<DataSO>(path);
// ...
action.Invoke(dataSO);
// ...
}
위 같은 내용을 가진 ForeachDataSO(Func<DataSO, bool> action)
이라는 함수를 만들었다.
모든 DataSO Asset을 찾고, 매개변수로 받은 action을 실행시켜주는 함수다.
이 함수를 이용해 DataSO Asset의 Addressable Group과 Label을 설정해주는 SetupAllAddressables()
을 새로 추가했고,
기존에 만들어뒀던 SaveAssets()
, InitDict()
기능도 이 함수를 이용하도록 바꿔줬다.
DataSO Asset 목록을 찾기 위해 기존에는 System.IO
를 이용해 직접 File을 경로별로 찾아서 각 DataSO를 처리했는데,
AssetDatabase.FindAssets
를 이용해 특정 Type?의 File GUID를 한 번에 가져오는 방법이 있었다.
DataSODefine
추가MDataSO
->DataSOWindow
MDataSODetail
->DataSOInspector
- Custom Inspector에서 특정 Field 값 변경 시 Asset에 SetDirty
InitDic()
->InitDict()
- 하나의 타입만을 대상으로 하던 InitDict를, 모든 타입에 대상으로 하도록 수정
BadIdDataSO
가 각 Type별로 정보를 가지도록List
->Dictionary<Type, List>
로 Type 수정DataSOWindow
의GetGoodName()
,ConvertToGoodName()
을DataSOUtil
로 이관DataSOUtil.GetBaseType()
->TryGetBaseType()
수정- 목표로 하지 않는 DataSO는
SetupAllAddressables()
Log Count에 포함하지 않도록 수정
DungeonConstraint 버그 수정
Addressable로 불러온 Dungeon과, NPC가 가지고 있는 Dungeon이 서로 맞지 않아 발생했떤 문제
그 외
- Nyang, VQExp를 GameStat에 병합
- Nyang, Mana, VillageQuestExp, VillageQuestLevel
- SOHelper에 Enum ShortCut 추가
- GetUnitStatData(), GetGameStatData(), GetDungeonStatData()
- Canvas 정리
- File/Folder 경로/계층구조 수정, Naming 수정
- MDataSO -> DataSO
- Datas => Data
- Criterias => Criteria
- System
- DataLoad를 모두 마친 후 Login을 시도하도록 수정 (기존에는 DataLoad 여부와 상관없이 Login을 시도함)
- DataLoad 시 현재 Scene이 Lobby가 아닌 경우에만 Lobby로 이동하도록 수정
- DataLoad 시 Image.fillAmount 뿐만 아니라 Text로도 정보를 알려주도록 수정
- 근데 너무 짧아서 잘 보이진 않는다.
- GameSetting 수정, EditorSettings 추가
- 컴파일 할 때마다
DataSOWindow.InitDict()
가 실행되는데, 좀 오래 걸리는 것 같아서InitDict()
실행 여부를 설정할 수 있는 기능을 만들었다. - 근데 잘 체감되지는 않는다.
- 컴파일 할 때마다
- ObjectPool
- ObjectPool에서 생성된 GameObject를 계층구조에서 정리
- 계층구조 창에 ObjectPool로 생성된 GameObject들이 쫘라락 도배가 되니까 보기가 좀 안좋아서 수정했다.
- Spawn Overloading 추가
- Transform.SetParent 매개변수로 worldPositionStays가 있는데, 기존 world 좌표 유지 여부를 결정할 수 있다. default: true
- ObjectPool에서 생성된 GameObject를 계층구조에서 정리
- DOTween Reimport
다음
- DataManager, SaveManager, PlayFabManager를 합치는 것을 고려해볼 것
- Unity Package 중 Behavior 한 번 알아보기
- Addressable 중복 피하기
- BlurShader
- 기존에 쓰던 Shader에 대해 경고 Log가 계속 찍힌다
- 개인적으로 Shader 공부도 할 겸 하나 만들어보는 것도 좋을 듯
- ‘One Two Three’: ‘Unity로 손쉽게 만드는 Blur 쉐이더’
- ‘원문 (일본)’: ‘Unityで手軽に2D擦りガラスシェーダー’
- 근데 Unity6 에서 동작하는지 여부는 잘 모르겠다. 이것도 경로 Log 뜨면 어떡하지?
0408 0609
Building ONEnable OnDisable
Building 보유효과? 이건 SaveData에서 가져와야 할 ㄷㅅ드?
처음 Init
Runtime Calc
임의ㅡ로 솥 시너지 같은 느낌