WitchMendokusai 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 ๋จ๋ฉด ์ด๋กํ์ง?