ํฌ์ŠคํŠธ

๐Ÿซ WitchMendokusai DevLog 03

๐ŸŽฒ _


์ผ์ง€๋ฅผ ๊พธ์ค€ํžˆ ์ ๋Š”๊ฒŒ ์ฐธ ์–ด๋ ต๋‹ค.

๐ŸŽฒ ๋ณ€๊ฒฝ์  : ์ธ๊ฒŒ์ž„

  • ๋˜์ „ ๋ณด์ƒ UI
    • ๊ธฐ์กด ํ€˜์ŠคํŠธ ๋ณด์ƒ UI๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ ์žฌ์‚ฌ์šฉ
  • ๋˜์ „ ์Šคํ…Œ์ด์ง€
    • ๊ธฐ์กด ์Šคํ…Œ์ด์ง€๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ ์žฌ์‚ฌ์šฉ
    • ๋‹จ์ˆœ ๋ฑ€์„œ๋ฅ˜์—์„œ ๋กœ๊ทธ๋ผ์ดํฌ ์‹ ๋งต ๋ชจ์–‘์œผ๋กœ ๊ธฐํš ๋ณ€๊ฒฝ
  • ๋˜์ „ ์ œ์•ฝ
    • ๊ธฐ์กด ๋‚œ์ด๋„ ์‚ญ์ œ
    • ๋ช…์ผ๋ฐฉ์ฃผ ์ œ์•ฝ, ๋ฆฌ์Šคํฌ ์˜ค๋ธŒ ๋ ˆ์ธ ์œ ๋ฌผ ๊ฐœ๋…์˜ ์ œ์•ฝ ์ถ”๊ฐ€
    • ํ† ๊ธ€ ๊ฐ€๋Šฅํ•˜๋„๋ก
      • UISlot์— ํ™œ์„ฑํ™”/๋น„ํ™œ์„ฑํ™” ๊ธฐ๋Šฅ ์ถ”๊ฐ€
  • Monster => Mob

  • ์ƒ์  ๊ธฐ๋Šฅ ๋””๋ฒจ๋กญ
  • Artifact๋ฅผ DataSO๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ
  • DataBuffer๋„ DataSO๋ฅผ ์ƒ์†๋ฐ›์Œ
  • UIDataBuffer๋ฅผ UI~Grid๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ
  • DataBuffer๊ฐ€ ์ž์‹ ์„ ์‚ฌ์šฉํ•˜๋Š” UI~Grid๋ฅผ ์ถ”์ ํ•˜์—ฌ ์—…๋ฐ์ดํŠธ

  • ํ”Œ๋ ˆ์ด์–ด ์ธํ„ฐ๋ ‰์…˜์„ ์ผ๋ฐ˜ ํด๋ž˜์Šค๋กœ ๋ณ€๊ฒฝ (๊ธฐ์กด MonoBehaviour ์ƒ์† ์ œ๊ฑฐ)
  • ์Šคํ‚ฌ
    • SkillHandler ์ถ”๊ฐ€
    • Skill์—์„œ Skill, SkillData๋กœ ๋ถ„๋ฆฌ
    • ์ฟจํƒ€์ž„์ด TimeManager.Tick์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋„๋ก ๋ณ€๊ฒฝ (๊ธฐ์กด์—” Update์—์„œ ๋Œ์•„๊ฐ€์„œ, ์ผ์‹œ์ •์ง€๋ฅผ ํ•ด๋„ ์ฟจํƒ€์ž„์ด ๋Œ์•„๊ฐ)
    • ์ž„์‹œ ๊ทผ์ ‘ ๊ณต๊ฒฉ
  • ์ƒˆ BGM
    • BY PROTODOME
  • InputSystem, Addressable ํŒจํ‚ค์ง€ ์ถ”๊ฐ€
  • InputSystem์„ ์ด์šฉํ•œ UI ํ‚ค๋ณด๋“œ ์กฐ์ž‘
    • UISlot, Select์™€ Click ์ด๋ฒคํŠธ ๋ถ„๋ฆฌ
  • UI ๋””๋ฒจ๋กญ

๐ŸŽฒ ๋ณ€๊ฒฝ์  : ์ธ๊ฒŒ์ž„๊ณผ ๊ด€๋ จ์—†๋Š”

๐Ÿ‘พ ScriptableObject ์ด๋ฆ„ ๊ฒ€์‚ฌ ๊ฐœ์„ 

์ปค๋ฐ‹ : SO ํŒŒ์ผ ์ด๋ฆ„ ๊ฒ€์‚ฌ ์‹œ, ID๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ด๋ฆ„๋„ ํ™•์ธํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋„๋ก ์ˆ˜์ •
์ปค๋ฐ‹ : SO ํŒŒ์ผ ์ด๋ฆ„ ์ˆ˜์ • ์‹œ, ํŒŒ์ผ๋ช…์œผ๋กœ ์“ธ ์ˆ˜ ์—†๋Š” ๋ฌธ์ž ์ œ๊ฑฐ

1
2
3
4
5
6
7
8
9
10
11
12
string goodName = $"{assetPrefixes[typeof(T)]}_{asset.ID}_{asset.Name}";
// if (asset.name.StartsWith($"{assetPrefixes[typeof(T)]}_{asset.ID}") == false)

// ํŒŒ์ผ ์ด๋ฆ„์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ž๋ฅผ ์ œ๊ฑฐ
Regex regex = new(string.Format("[{0}]", Regex.Escape(new string(Path.GetInvalidFileNameChars()))));
goodName = regex.Replace(goodName, string.Empty);

if (asset.name.Equals(goodName) == false)
{
	Debug.Log($"์—์…‹ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. {asset.name} -> {goodName}");
	AssetDatabase.RenameAsset(filePath, goodName);
}

ScriptableObject์˜ ํŒŒ์ผ ์ด๋ฆ„ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์‹œ,

๊ธฐ์กด์—๋Š” ํ•ด๋‹น ScriptableObject์˜ ID๋งŒ ๊ฒ€์‚ฌํ–ˆ๋Š”๋ฐ,
์ด๋ฆ„์„ ํฌํ•จํ•˜์—ฌ ์ ์ ˆํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋„๋ก ๊ฐœ์„ 

์ด๋•Œ, ํŒŒ์ผ ์ด๋ฆ„์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ž๋ฅผ Regex๋ฅผ ์ด์šฉํ•˜์—ฌ ์ œ๊ฑฐ
์˜ˆ๋ฅผ ๋“ค์–ด 2์žฅ : ์œ„์ƒ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ํ€˜์ŠคํŠธ ScriptableObject๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ,
๋ฌธ์ž :๊ฐ€ ํŒŒ์ผ ์ด๋ฆ„์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ž๋ผ์„œ 2์žฅ ์œ„์ƒ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋„๋ก ํ•จ

๋„์–ด์“ฐ๊ธฐ๊ฐ€ ์ข€ ์–ด์ƒ‰ํ•ด์„œ ์ง€์›Œ์•ผ ํ•˜๋‚˜ ์‹ถ๊ธดํ•œ๋ฐ, ์ผ๋‹จ ๋ณด๋ฅ˜.

์ฐธ๊ณ  : C# ํŒŒ์ผ๋ช… ์œ ํšจ์„ฑ ์ฒดํฌ
์ฐธ๊ณ  : ํŒŒ์ผ ๋ช…์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ž (๋‚˜๋ฌด์œ„ํ‚ค)

๐Ÿ‘พ ์›์ธ๋ชจ๋ฅผ TextMeshPro ์—๋Ÿฌ ๋กœ๊ทธ

์ปค๋ฐ‹ : ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ํด๋ฆฌ์‹ฑ + TMP ์˜ค๋ฅ˜ ์ˆ˜์ •์„ ์œ„ํ•œ ํŒจํ‚ค์ง€ ๋ฒ„์ „์—…

MissingReferenceException: The variable m_AtlasTextures of TMP_FontAsset doesn't exist anymore. ์—๋Ÿฌ ๋กœ๊ทธ๊ฐ€ ๊ณ„์† ๋œจ๋Š”๋ฐ, ์›์ธ์„ ๋ชจ๋ฅด๊ฒ ๋‹ค.

์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” TMP Font Asset๋ฅผ Resetํ•˜๊ณ  Clear Dynamic Dataํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๊ณ ๋Š” ํ•˜๋Š”๋ฐ ๋‚˜์—๊ฒŒ๋Š” ์ ์šฉ๋˜์ง€ ์•Š์•˜๊ณ ,
๋‚˜๋Š” TextMeshPro ํŒจํ‚ค์ง€๋ฅผ 3.0.8์—์„œ 3.2.0-pre.9 ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค.

์ฐธ๊ณ  : MissingReferenceException: The variable m_AtlasTextures of TMP_FontAsset doesnโ€™t exist anymore.

To Be Continued..

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.