๊ด€๋ฆฌ ๋ฉ”๋‰ด

๋ง๊ฐ๋กœ๊ทธ

ํฌ๋ž˜ํ”„ํ†ค ์ •๊ธ€ WEEK13 Day 99 ๊ฐœ์ธ๋ณ„ ๊ณผ์ œ - ์œ ๋‹ˆํ‹ฐ 3D๋กœ ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ ๋ณธ๋ฌธ

Krafton jungle

ํฌ๋ž˜ํ”„ํ†ค ์ •๊ธ€ WEEK13 Day 99 ๊ฐœ์ธ๋ณ„ ๊ณผ์ œ - ์œ ๋‹ˆํ‹ฐ 3D๋กœ ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ

habbn 2024. 4. 16. 21:16
728x90

๐Ÿ“†2024.04.16

 

์œ ๋‹ˆํ‹ฐ 3D๋กœ ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ(๋ฉ€ํ‹ฐ ํ”Œ๋ ˆ์ž‰)

์•„ํ‚คํ…์ฒ˜ - ์œ ๋‹ˆํ‹ฐ , ๋’ค๋(์„œ๋ฒ„)

๊ธฐ๋Šฅ ์š”๊ตฌ์‚ฌํ•ญ

- ํšŒ์›๊ฐ€์ž… / ๋กœ๊ทธ์ธ
- ๊ฒŒ์‹œ๋ฌผ ์ž‘์„ฑ
- ๊ฒŒ์‹œ๋ฌผ ๋ชฉ๋ก๋ณด๊ธฐ
- ๊ฒŒ์‹œ๋ฌผ ์ฝ๊ธฐ

 


๐Ÿ™†‍โ™€๏ธ์•Œ๊ฒŒ ๋œ ์  & ๊นŒ๋จน์€ ์ 

 

1. UnityYAMLMerge 

 

์œ ๋‹ˆํ‹ฐ ํ˜‘์—…์„ ํ•˜๋‹ค๋ณด๋ฉด ์„œ๋กœ๊ฐ€ ๊ฐ™์€ ์”ฌ๊ณผ ํ”„๋ฆฌํŒน์„ ์ˆ˜์ •ํ•˜๋‹ค๋ณด๋‹ˆ ๋จธ์ง€ ์‹œ ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜๋Š” ์ผ์ด ์žˆ์—ˆ๋‹ค.

์ด ์ถฉ๋Œ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฐพ์•„๋ณด๋‹ˆ Unity์—์„œ ์ œ๊ณตํ•˜๋Š” UnityYAMLMerge ๋ผ๋Š” ๊ณต์‹ merge tool์„ ์‚ฌ์šฉํ•˜๋ฉด ์”ฌ์ด๋ž‘ ํ”„๋ฆฌํŒน์„ ์ œ๋Œ€๋กœ mergeํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

Unity git ์‹œ์ž‘ & UnityYAMLMerge

git์œผ๋กœ Unity ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•  ๋•Œ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ์ด Scene์ด๋‚˜ Prefab ๋“ฑ์„ ์ˆ˜์ •ํ•˜๋ฉด ๊ณจ์น˜๊ฐ€ ์•„ํŒŒ์ง„๋‹ค. ์ด๋Ÿฐ Asset๋“ค์„ ๊ทธ๋ƒฅ git ๊ธฐ๋ณธ ์„ค์ •๋Œ€๋กœ ํ…์ŠคํŠธ ํŒŒ์ผ์ฒ˜๋Ÿผ mergeํ•˜๋ฉด unity์—์„œ ์ฝ์„ ์ˆ˜ ์—†๊ฒŒ ๋  ์ˆ˜๋„ ์žˆ

cookiehcl.tistory.com

 

2. ํ…์ŠคํŠธ ๋งค์‹œ ํ”„๋กœ ํ•œ๊ธ€์ด ๋„ค๋ชจ๋กœ ๋‚˜์˜ฌ ๋•Œ

 

1. ์œ ๋‹ˆํ‹ฐ ํ…์ŠคํŠธ์—์„œ ํ”„๋กœ ํ•œ๊ธ€์šฉ ํฐํŠธ ์ƒ์„ฑ

 - ์›ํ•˜๋Š” ์œ ๋‹ˆํ‹ฐ ํ…์ŠคํŠธ ํฐํŠธ๋ฅผ  Window > TextMeshPro > Font Asset Creator ์—์„œ ํ…์ŠคํŠธ ๋งค์‹œ ํ”„๋กœ์šฉ ํฐํŠธ๋กœ ์ƒ์„ฑํ•œ๋‹ค.

 

2. ์œ ๋‹ˆํ‹ฐ ํ…์ŠคํŠธ ๋ฉ”์‹œ ํ”„๋กœ ํ•œ๊ธ€ ํฐํŠธ ์ ์šฉ

- ์ƒ์„ฑํ•œ ํฐํŠธ ํŒŒ์ผ์„ ๋ˆ„๋ฅด๊ณ  ์ธ์ŠคํŽ™ํ„ฐ ์ฐฝ์„ ๋ณด๋ฉด Generation Setting ๋ถ€๋ถ„์— Atlas Population Mode์— Dynamic์„ ์„ ํƒํ•ด์ฃผ๊ณ  Sampling Point Size๋ฅผ 3-40 ์ •๋„๋กœ ๋งž์ถฐ ์ค€๋‹ค.

 

[์œ ๋‹ˆํ‹ฐ] ํ…์ŠคํŠธ ๋ฉ”์‹œ ํ”„๋กœ ํ•œ๊ธ€์ด ๋„ค๋ชจ๋กœ ๋‚˜์˜ฌ๋•Œ (Text Mesh Pro ํ•œ๊ธ€ ์„ธํŒ…)

์•ˆ๋…•ํ•˜์„ธ์š”. BlockDMask์ž…๋‹ˆ๋‹ค. ์œ ๋‹ˆํ‹ฐ ์ตœ์‹  LTS ๋ฒ„์ „์ธ 2021.3.X ๋ฒ„์ „์œผ๋กœ ์ž‘์—…์„ ํ•˜๋˜์ค‘ ๋””ํดํŠธ text ๊ฐ€ UGUI ํ…์ŠคํŠธ๊ฐ€ ์•„๋‹Œ Text Mesh Pro ๋กœ ๋ณ€๊ฒฝ๋˜์–ด์žˆ๋Š”๊ฑธ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Text Mesh Pro ๋กœ ํ•œ๊ธ€์„

blockdmask.tistory.com

 

3. IndexOf ๋ฉ”์„œ๋“œ

- ๋ฆฌ์ŠคํŠธ์—์„œ ์ง€์ •๋œ ์š”์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ์—์„œ ํŠน์ • ์š”์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

 

4. button.onClick.AddListener(() -> ํ•จ์ˆ˜(์ธ์ž));

์ธ์ž๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋žŒ๋‹ค์‹์œผ๋กœ ํ•ด์•ผํ•œ๋‹ค.

 

5. ํ”„๋ฆฌํŒน์— child object๋“ค์€ Find() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฐพ์•„์ค˜์•ผํ•œ๋‹ค.

 

์„œ๋ฒ„

- ์„œ๋ฒ„๋Š” ์ฒ˜์Œ์ด๋ผ ์•„์ง ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.

- ๋’ค๋ ์„œ๋ฒ„๋Š” ๋ฌด์กฐ๊ฑด ๋งค์นญ ์„œ๋ฒ„์— ์ ‘์†์„ ํ•˜๊ณ  ๋Œ€๊ธฐ๋ฐฉ์„ ๋งŒ๋“ค๊ณ  ๋งค์นญ์ด ์„ฑ์‚ฌ๋˜์•ผ ์ธ๊ฒŒ์ž„ ์„œ๋ฒ„๋กœ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 3๊ฐ€์ง€๋ฅผ ๋‹ค ๋งŒ๋“ค์–ด์ค˜์•ผ ํ•œ๋‹ค.


๐Ÿ’ฅTrouble Shooting

 

0. ๊ฐ ๊ฒŒ์‹œ๊ธ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ DB์—๋Š” ์ €์žฅํ•ด๋†จ์ง€๋งŒ ๋กœ์ปฌ์—๋Š” ์–ด๋–ป๊ฒŒ ์ €์žฅํ•  ๊ฒƒ์ด๊ณ  ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ธ๊ฐ€? 

ํ•ด๊ฒฐ๋ฐฉ์•ˆ) ๊ฐ ๊ฒŒ์‹œ๊ธ€์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐ์ฒด ๋ฐฐ์—ด์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•ด์„œ ์ €์žฅํ•ด์„œ ๊ฐ€์ ธ์™”๋‹ค.

    public struct PostData
    {
        public string title;
        public string content;
        public string inDate;
        public string id;
    }
    //๊ฒŒ์‹œ๊ธ€ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ๊ตฌ์กฐ์ฒด ๋ฆฌ์ŠคํŠธ
    public List<PostData> postDataList = new List<PostData>();

 

1. ๊ฒŒ์‹œ๊ธ€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

๊ฒŒ์‹œ๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ณผ์ •์—์„œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค ๊ธฐ์กด์— ์žˆ๋Š” ๊ฒŒ์‹œ๊ธ€์ด ๋˜ ๋ถˆ๋ ค์™€์„œ UI๊ฐ€ ๊ณ„์†ํ•ด์„œ ์ƒ์„ฑ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ

 

<ํ•ด๊ฒฐ ๋ฐฉ์•ˆ>

GetPost() ํ•จ์ˆ˜ ์•ˆ์—์„œ ๊ฒŒ์‹œ๊ธ€์„ ์กฐํšŒํ•˜๊ณ  ๊ฒŒ์‹œ๊ธ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๊ตฌ์กฐ์ฒด์— ์ถ”๊ฐ€ํ•ด์ฃผ๊ธฐ ์ „์— ๊ธฐ์กด์˜ ๊ฒŒ์‹œ๊ธ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•˜๊ณ  ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ๋ฐฉ์•ˆ์œผ๋กœ ํ•ด๊ฒฐํ•˜์˜€๋‹ค.

UI ์ƒ์„ฑ ๋ถ€๋ถ„์—์„œ๋„ ๊ธฐ์กด์˜ ๊ฒŒ์‹œ๊ธ€ UI ์š”์†Œ๋ฅผ ๋ชจ๋‘ ์‚ญ์ œํ•˜๊ณ  ์ƒˆ๋กœ์šด ๊ฒŒ์‹œ๊ธ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ UI ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์—ˆ๋‹ค.

 

2. ๊ฒŒ์‹œ๋ฌผ ์ฝ๊ธฐ & ์‚ญ์ œํ•˜๊ธฐ

๊ฒŒ์‹œ๊ธ€ UI๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์˜ ๋ฐ์ดํ„ฐ (title, content)๊ฐ€ ๋ณด์—ฌ์ง€์ง€ ์•Š๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ,

์‚ญ์ œํ•˜๊ธฐ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฝ˜์†”์—๋Š” ์‚ญ์ œ๊ฐ€ ์ž˜ ๋˜์ง€๋งŒ, UI ์‚ญ์ œ๊ฐ€ ์ž˜ ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ

 

<ํ•ด๊ฒฐ๋ฐฉ์•ˆ>

์ฒซ ๋ฒˆ์งธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐ ๊ฒŒ์‹œ๊ธ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ธ๋ฑ์Šค๋กœ ๊ตฌ๋ณ„ํ•ด์ฃผ๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ญ์ œํ•˜๊ธฐ ๋ถ€๋ถ„์—์„œ ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์ด ์‚ญ์ œ๊ฐ€ ๋˜๋ฉด์„œ ์ธ๋ฑ์Šค๊ฐ€ ๊ผฌ์ด๊ธฐ ์‹œ์ž‘ํ•ด์„œ ์ธ๋ฑ์Šค ์—๋Ÿฌ๊ฐ€ ๊ณ„์†ํ•ด์„œ ๋ฐœ์ƒํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ธ๋ฑ์Šค๋กœ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ฐ ๊ฒŒ์‹œ๊ธ€์˜ ๊ณ ์œ  ๋ฒˆํ˜ธ(id)์ธ inDate๋กœ ํ•ด๋‹น ๊ฒŒ์‹œ๊ธ€์˜ ๋‚ด์šฉ์„ ๋ณด์—ฌ์ฃผ๊ณ , ์‚ญ์ œํ•˜๋„๋ก ํ–ˆ๋‹ค.

๋˜ํ•œ ํ•ด๋‹น inDate์— ๋งž๋Š” GameObject๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋”•์…”๋„ˆ๋ฆฌ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ–ˆ๋‹ค.

public Dictionary<string, GameObject> postObjectDic = new Dictionary<string, GameObject>();

 

๋”•์…”๋„ˆ๋ฆฌ๋Š” ์ค‘๋ณต ํ‚ค๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต ํ‚ค ๋ฐฉ์ง€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. -> ์•ˆํ•˜๋ฉด ์—๋Ÿฌ ๋‚˜์š”..

// ์ค‘๋ณต ํ‚ค ๋ฐฉ์ง€
if (!postObjectDic.ContainsKey(postData.inDate))
{
   //๋”•์…”๋„ˆ๋ฆฌ์— ๊ฒŒ์‹œ๊ธ€ ๋ฐ์ดํ„ฐ์™€ ๊ฒŒ์‹œ๊ธ€ UI ์š”์†Œ๋ฅผ ์ถ”๊ฐ€
   postObjectDic.Add(postData.inDate, postObject);
}

 

ContainsKey() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•ด๋‹น inDate๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ๋”•์…”๋„ˆ๋ฆฌ์— ๊ฒŒ์‹œ๊ธ€ ๋ฐ์ดํ„ฐ์™€ ๊ฒŒ์‹œ๊ธ€ UI ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. 

 


ํšŒ๊ณ 

 

๊ฐœ์ธ๋ณ„ ๊ณผ์ œ์ธ ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ๋ฅผ ์œ ๋‹ˆํ‹ฐ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์„ ๋๋ƒˆ๋‹ค.

2์ธํŒ€์œผ๋กœ ๊ตฌ์„ฑํ•ด์„œ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ์ž์—ฐ์Šค๋ ˆ ๋‚˜๋Š” ํด๋ผ์ด์–ธํŠธ ๋ถ€๋ถ„์„ ๋งก์•„ ํ–ˆ๊ณ  ๋™๋ฃŒ ๋ถ„์€ ์„œ๋ฒ„๋ฅผ ๋งก์•˜๋‹ค.

์‚ฌ์‹ค ์ฒ˜์Œ์— ์„œ๋ฒ„๋ฅผ ๋‚ด๊ฐ€ ํ•˜๊ฒ ๋‹ค๊ณ  ๋‹ค์งํ–ˆ๋Š”๋ฐ ๋„ˆ๋ฌด๋„ˆ๋ฌด๋„ˆ๋ฌด ์–ด๋ ต๊ณ  ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€์„œ ๋ฐ”๊ฟ”๋‹ฌ๋ผ๊ณ  ํ–ˆ๋‹ค.. ํด๋ผ์ด์–ธํŠธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„œ๋ฒ„๋„ ํ•ด๋ณด๋Š” ๊ฒŒ ์ข‹๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ ์•„์ง ํด๋ผ์ด์–ธํŠธ๋„ ๋ถ€์กฑํ•œ ์ ์ด ๋งŽ๋‹ค๊ณ  ๋Š๊ปด์„œ ์„œ๋ฒ„๋ณด๋‹ค๋Š” ํด๋ผ๋ฅผ ํ•˜๋Š”๊ฒŒ ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚˜๋Š” ํ”Œ๋ ˆ์ด์–ด ์ด๋™(์กฐ์ด์Šคํ‹ฑ ๊ธฐ๋ฐ˜) & ์นด๋ฉ”๋ผ ์ด๋™(ํ„ฐ์น˜ ํŒจ๋“œ) ๊ทธ๋ฆฌ๊ณ  ๊ฒŒ์‹œํŒ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์˜€๋‹ค. ํšŒ์›๊ฐ€์ž…/๋กœ๊ทธ์ธ์€ ๊ฐ™์€ ํŒ€์›์ด ํ–ˆ๋‹ค.

์œ ๋‹ˆํ‹ฐ๋ฅผ ์˜ค๋žœ๋งŒ์— ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋‹ˆ ๊นŒ๋จน์€ ๊ฒŒ ๋งŽ์•„์„œ ์ด๋ฒˆ 2์ฃผ๊ฐ„์€ ๋‹ค์‹œ ์ต์ˆ™ํ•ด์ง€๋Š” ์‹œ๊ฐ„์œผ๋กœ ํ™œ์šฉํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

๋˜ํ•œ ํ˜‘์—…์€ ์ฒ˜์Œ์ด๋ผ ๊ฐ™์ด ํ•˜๋ฉด์„œ ๋ฐฐ์šด ์ ๋„ ๋งŽ์•˜๋‹ค.

728x90