포스트

'마녀:귀찮아!' DevLog v0.0.4

'마녀:귀찮아!' 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)
  • 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 수정
  • DataSOWindowGetGoodName(), 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
  • DOTween Reimport

다음


To Be Continued..


0408 0609

Building ONEnable OnDisable
Building 보유효과? 이건 SaveData에서 가져와야 할 ㄷㅅ드?
처음 Init
Runtime Calc
임의ㅡ로 솥 시너지 같은 느낌

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.