WitchMendokusai DevLog 00
๐ _
์ค๋๋ถํฐ ๊ฐ๋ฐ์ผ์ง๋ฅผ ์ฐ๊ธฐ๋ก ๋ง์๋จน์๋ค.
๋ด ์๊ฐ์ด๋ ๊ฐ๋ฐ ๊ณผ์ ๋ณด๋ค๋ ์๊ฐ ์ ๋ฆฌ, ์๋ฃ ์ ๋ฆฌ์ ์ง์คํ ๊ฒ ๊ฐ๋ค.
์ค๋์ ํ์คํธ ์์คํ ์ ๊ธฐํ ํด๋ณด๊ธฐ๋ก ํ๋ค.
๐ ํ์คํธ ์์คํ ๊ธฐํ
๐ฟ Ref 1 : ์ฟ ํค๋ฐ ํน๋ค - ๊ณฐ์ ค๋ฆฌ ์ด์ฐจ
์ฟ ํค๋ฐ ํน๋ค์๋ ๊ณฐ์ ค๋ฆฌ ์ด์ฐจ๋ผ๋ ๊ฑด๋ฌผ์ด ์๋ค.
๊ณฐ์ ค๋ฆฌ ์ด์ฐจ๋ ์๋ ๊ธฐ๋ฅ์ ํ๋ค.
์ผ์ ์๊ฐ๋ง๋ค
์ด์ฐจ๊ฐ ์ญ์ ๋ค์ด์จ๋ค.- ์ด์ฐจ๋ง๋ค ์๋ก๋ค๋ฅธ
์์ดํ ์ ์๊ตฌ
ํ๋ค. - ์ด์ฐจ์ ์์ดํ
์
๋ฉํํ๋ฉด
, ์ด์ฐจ๊ฐ ์ญ์ ๋ ๋๋ค. - ๋ ๋ ์ด์ฐจ๋
๋๋คํ ๋ณด์
์ ๊ฐ์ง๊ณ ๋์์จ๋ค. - ๋ฐ๋ณต
๋ฉํ์ ๋์ด๋๊ฐ ์ด๋ ค์ธ์๋ก ๋ ์ข์ ๋ณด์์ ์ค๋ค.
์ปจํ
์ธ ๋ฅผ ์งํํ๋ฉด ์ด์ฐจ์ ์๊ฐ ๋์ด๋๋ค.
๐ฟ Ref 2 : ์์ฆ ํจ์ค
์ต๊ทผ ๋ช ๋ ๊ฐ, ์ฌ๋ฌ ๊ฒ์์์ ์ฌ์ฉํ๊ธฐ ์์ํ ์์คํ ์ด๋ค.
์๊ฐ์ ํน์ ์ฃผ๊ธฐ๋ฅผ ๋๋ ์์ฆ์ผ๋ก ๊ตฌ๋ถ์ํค๊ณ , ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
- ํ์คํธ๋ฅผ ์ค๋ค.
- ํ์คํธ๋ฅผ ์๋ฃํ๋ฉด ํฌ์ธํธ๋ฅผ ์ค๋ค.
- ํฌ์ธํธ๋ฅผ ์ผ์ ๋ ๋ชจ์ผ๋ฉด ๋ ๋ฒจ์ด ๋์ด๋๋ค.
- ๋ ๋ฒจ๋ง๋ค ๋ณด์์ ๋ฐ์ ์ ์๋ค.
์ฌํ๋ฅผ ์ฃผ๊ณ ํฐ์ผ์ ๊ตฌ๋งคํ๋ฉด, ๋ ๋ฒจ๋ง๋ค ์ถ๊ฐ์ ์ธ ๋ณด์์ ์ป์ ์ ์๋ค.
ํ์คํธ๋ ์ผ์ผ, ์ฃผ๊ฐ, ๋๋ค ๋ฑ ๋ค์ํ๊ฒ ์ฃผ์ด์ง๋ค.
๐ฟ Ref 3
ํน์ ์คํ ๋ฆฌ๋ ์ฃผ์ ๋ฅผ ๊ฐ์ง๊ณ ์ญ ์ด์ด์ง๋ ํ์คํธ (Like RPG, ์์ด๋ฌ๋ธ์ปคํผ)
์ผํ, ์ฃผ๊ฐํ (Like RPG, ์์ )
๐ฟ ์ค๊น๋ณด์
- ์๋ขฐ๋ฅผ ํด๊ฒฐํ๋ฉด ๋ณด์๊ณผ ์๋ขฐ ๊ฒฝํ์น๋ฅผ ๋ฐ์
- ์๋ขฐ ๊ฒฝํ์น๋ฅผ ๋ชจ์ ์๋ขฐ ๋ ๋ฒจ์ ์ฌ๋ฆด ์ ์์
- ์๋ขฐ ๋ ๋ฒจ์ด ๋์์ง์๋ก, ๋์ ๋ฑ๊ธ์ ์๋ขฐ๋ฅผ ๋ฐ์ ์ ์๊ณ , ์ฌ๋ฌ ์๋ขฐ๊ฐ ํด๊ธ๋จ
์๋ขฐ ๋ ๋ฒจ์ ์์๋ก ์กฐ์ ํ์ฌ, ์ํ๋ ์๋ขฐ๋ฅผ ์ง์คํ์ฌ ๋ฐ์ ์ ์๋๋ก
- ์๋ขฐ ์ข
๋ฅ
- ๋จ์ ์๋ขฐ : ์ ๋ฌ, ๋ํ, ํธ์, ์์ดํ ์์ฒญ, ๋์ ํด๋ฆฌ์ด, ๋ชน ์ฒ์น, ์ํธ์์ฉ
- ์คํ ๋ฆฌ ์๋ขฐ (๋ฉ์ธ, ์๋ธ, ํ์ฅํฉ) : ์คํ ๋ฆฌ, ๋ํ, ์ปท์ฌ + ๋จ์ ์๋ขฐ
๐ ์ผ๋จ ๋ง๋ค์ด๋ณด์
์ฟ ํค๋ฐ ํน๋ค์ ๊ณฐ์ ค๋ฆฌ ์ด์ฐจ ๊ฐ์ ๊ธฐ๋ฅ์ ๋จผ์ ๋ง๋ค์ด๋ณด์.
๊ทผ๋ฐ ๋ง๋ ์ ์ง์๋ ์ด์ฐจ๊ฐ ์๋ค.
์ฃผ๋ณ ๋ง์์ ์๋ ์๋ขฐ ๊ฒ์ํ์์ ์๋ขฐ๋ฅผ ์ฐพ์์ค๊ธฐ๋ก ํ์.
์๋ขฐ๋ฅผ ์ฐพ์์ค๊ณ , ์์ดํ
์ ์ ๋ฌํ๋ ์ผ์ ๋ชจ๋ ์ธํ์ด ๋์ ํด์ค ๊ฒ์ด๋ค.
์ธํ์ ํ๋ ์ด์ด๋ธ ์บ๋ฆญํฐ์ง๋ง,
๋์์ ํด๋์์ค๋ธํด๋์ ์ฅ์ธ๊ณผ ๊ฐ์ ์ญํ ๋ ํด์ค ๊ฒ์ด๋ค.
๋ถ์ฌ ๊ฒ์์์ ๋ง์ด ๋ณธ ๊ฒ ๊ฐ์ ์์คํ
์ด๋ค.
์ด์จ๋ ,
๊ฑฐ๋๋ฆฌ๊ณ ์๋ ์ธํ์ ๊ด๋ฆฌํ๋ ์์คํ
๊ณผ UI๊ฐ ํ์ํ๋ค.
์ด๋ฅผ ๋จผ์ ๋ง๋ค์ด๋ณด์.
๐ ์ธํ ๊ด๋ฆฌ
์ฌ์ค ์ธํ ๊ด๋ฆฌ UI๋ ์ด๋ฏธ ์๋ค.
ํ์ง๋ง ๋์ ์ ๋ค์ด๊ฐ ์ธํ์ ์ ํํ๋ ๊ธฐ๋ฅ, ์ธํ์ ์ฅ๋น๋ฅผ ์ ํํ๋ ๊ธฐ๋ฅ๋ง ์๋ ์ํ๋ค.
์ฌ๊ธฐ์ ๋ ํ์ํ ๊ธฐ๋ฅ์ ์๋์ ๊ฐ๋ค.
- ๊ฑฐ๋๋ฆฌ๋ ์ธํ์ ์๋ฅผ ํ์
- ๊ฑฐ๋๋ฆฌ๋ ์ธํ Slot ๋์ด
๊ฐ์๊ธฐ ์๊ฐ๋ฌ๋๋ฐ,
ํ๋ ์ด์ด๋ธ ์บ๋ฆญํฐ๋ ์๋์ง๋ง, ์ผ์ ํ ์ ์๋ ์ธํ์ด ์์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
๋๋ฏธ ์ธํ
์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
์ถํ ์ด๋ฐ ๋๋ฏธ ์ธํ์ ํผ์ ์ง์ด๋ฃ์ด์,
ํ๋ ์ด์ด๋ธ ์บ๋ฆญํฐ๋ก ์งํ์ํค๋ ์์ผ๋ก ๋ง๋ค๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
- ๋๋ฏธ ์ธํ
๐ฟ ๋๋ฏธ ์ธํ
1
2
3
4
5
public class GameData
{
// ~
public int dummyDollCount = 1;
}
๊ธฐ์กด ์ธํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๊ฒ์ฒ๋ผ, ๋๋ฏธ ์ธํ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ ํ์๊ฐ ์๋ค.
์ด๋, ๋๋ฏธ ์ธํ์ ๋ชจ๋ ๋๊ฐ์ ๋ชจ์ต์ผ๋ก ๋ง๋ค๊ณ ๊ฐ์ฑ์ ์ฃผ์ง ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์,
๊ธฐ์กด ์ธํ์ฒ๋ผ ์ธํ์ด ์ฐฉ์ฉํ๊ณ ์๋ ์ฅ๋น ๊ฐ์ ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ์ฅํ ํ์๊ฐ ์๋ค.
๊ทธ๋์ ๋จ์ํ GameData
ํด๋์ค์ dummyDollCount
๋ณ์๋ฅผ ์ถ๊ฐํ๋ค.
๋ชจ๋ ์ธํ์ ์ค์ฒดํ์์ผ ๋งต์ ๋์๋ค๋๊ฒ ํ๊ณ ์ถ๊ธด ํ๋ฐ, ๋น์ฅ ํ์ํ์ง ์์์ ํจ์ค.
๐ฟ ๊ฑฐ๋๋ฆฌ๋ ์ธํ ํ์
๊ฑฐ๋๋ฆฌ๊ณ ์๋ ์ธํ์ ์ด๋ป๊ฒ ํ์ํ ๊น?
๋ชจ๋ ์ธํ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ ์ธ๋ฒคํ ๋ฆฌ ํ์์ผ๋ก ๋ง๋ค๊ณ ,
๊ฑฐ๋๋ฆฌ๊ณ ์๋ ์ธํ๋ง ํ์ฑํ์ํค๊ธฐ๋ก ํ์.
์๋ก UIDollBuffer : UIDataBuffer<Doll>
ํด๋์ค๋ฅผ ๋ง๋ค์๋ค.
UIDataBuffer<T>
๋ ํน์ ์ปจํ
์ด๋์ ์๋ ์์๋ค์ UISlot
์ ํ ๋น์์ผ ๋ณด์ฌ์ฃผ๋, ๋ด๊ฐ ๋ง๋ ํด๋์ค๋ค.
์ด๋ฅผ ์์ ๋ฐ๊ณ , ๋๋ฏธ ์ธํ๊ณผ ํจ๊ป ๊ฑฐ๋๋ฆฌ๊ณ ์๋ ์ธํ๋ง ํ์ํ๋๋ก Overrideํ๋ค.
์ ์์
์ ๊ธ๋ฐฉ ๋๋ฌ๋๋ฐ,
๊ธฐ์กด ์ธํ ๊ด๋ฆฌ UI์ ์๋ ๊ธฐ๋ฅ๋ค์ ์ฎ๊ธฐ๊ณ ์์ ํ๋๋ผ ์๊ฐ์ ์ข ๋จน์๋ค.
๊ธฐ์กด์๋ ๋์ ์ ๋ค์ด๊ฐ ์ธํ ์ ๋ณด ํ๋๋ง UI๋ก ๋ณด์ฌ์คฌ๋ค.
๊ทธ๋์ Prev/Next ๋ฒํผ์ ๋๋ฅด๋ฉด selectedDollIndex
๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ , dollDic[selectedDollIndex]
๋ก ์ธํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ UI๋ฅผ ๊ฐฑ์ ํ๋ค.
ํ์ง๋ง ์ฌ๋ฌ ์ธํ์ ๋ฆฌ์คํธ๋ก ๋์ดํ๊ฒ ๋๋ฉด์, ๋์ ์ ๋ค์ด๊ฐ ์ธํ์ด ์๋ ๋ค๋ฅธ ์ธํ์ ์ ๋ณด๋ UI์ ๋์ธ ์ ์์ด์ผ ํ๋ค.
๊ทธ๋์ UI์์ ๋ง์ง๋ง์ผ๋ก ์ ํํ ์ธํ์ Index
๋ฅผ ๊ธฐ์ค์ผ๋ก UI๋ฅผ ๋์ฐ๊ณ , ํ์๋ ์ธํ์ ๋์ ์ ๋ค์ด๊ฐ ์ธํ์ผ๋ก ์ ํํ ์ ์๋ ๋ฒํผ์ ์๋ก ํ๋ ๋ง๋ค์๋ค.
UI๋ ์ถํ ๋ ๊พธ๋ฉฐ๋ณด๊ธฐ๋ก.
๐ฟ ๊ฑฐ๋๋ฆฌ๋ ์ธํ ์ ํ์๋ฅผ ํ๊ธฐ ์ํด์
ํด๋์์ค๋ธํด๋ ์ฅ์ธ์ฒ๋ผ, ์ฌ๊ธฐ์๋ ๊ฑฐ๋๋ฆฌ๊ณ ์๋ ์ธํ ์๋ฅผ ํ์ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
๋ชฉ์ ์ ํ์ฌ ์ผ์ ์ํฌ ์ ์๋ ์ธํ ์๊ฐ ์ผ๋ง๋ ์๊ณ , ์ผ์ ํ๊ณ ์ธํ ์๋ ์ผ๋ง๋ ์๋์ง ์๋ ค์ฃผ๋ ๊ฒ.
์ฌ๊ธฐ์ ์ข ๊ณ ๋ฏผ์ค๋ฌ์์ง๋๊ฒ ์๋ค.
์ด๋ค ์ธํ์ด ์ด๋ค ์ผ์ ํ๊ณ ์๋์ง ์๊ณ ์์ด์ผ ํ๋๋ฐ, ์๊ฑด ์ด๋ป๊ฒ ์ ์ฅํ ๊น?
๋๋ฏธ์ธํ๋ง ์ผ์ ํ๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด, ์ผ ์ ๋ณด๋ฅผ ๋ฐ๋ก ์ ์ฅํ๋ฉด ๋๋ค.
๋๋ฏธ์ธํ์ ๋ชจ์ต์ ๋ชจ๋ ๋๊ฐ๊ธฐ ๋๋ฌธ์, ์ผ ์ ๋ณด์ ๋๋ฏธ์ธํ์ ๋จ์ํ ์ธ๋ฑ์ค ์์๋๋ก ๋งค์นญ์ํค๋ฉด ๋๋ค.
ํ์ง๋ง ํ๋ ์ด์ด๋ธ ์บ๋ฆญํฐ๋ ์ผํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ณ ์ถ๋ค.
ํ๋ ์ด์ด๋ธ ์บ๋ฆญํฐ๊ฐ ์ผ์ ํ๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด, ์ผ ์ ๋ณด์ ํ๋ ์ด์ด๋ธ ์บ๋ฆญํฐ์ ์ ๋ณด๋ฅผ ๋งค์นญ์์ผ์ ์ ์ฅํด์ผ ํ๋ค.
๋๊ฐ์ ํ๋ ์ด์ด๋ธ ์บ๋ฆญํฐ๋ฅผ ์ฌ๋ฌ ๊ธฐ ๊ฐ์ง ์ ์๊ธฐ ๋๋ฌธ์, ํ๋ ์ด์ด๋ธ ์บ๋ฆญํฐ์ ID์ ์ผ ์ ๋ณด๋ฅผ ๋งค์นญ์ํค๋ฉด ๋๋ค.
๋ ๋ค ์ผ์ ํ ์ ์๊ฒ ํ๋ ค๋ฉด..
์๊ฐํด๋ณด๋ ๊ทธ๋ฅ ๋๋ฏธ์ธํ ๋ฐ๋ก, ํ๋ ์ด์ด๋ธ ์บ๋ฆญํฐ ๋ฐ๋ก ์ ์ฅํ๋ฉด ๋๋ค !
๐ฟ ์ผ ์ ๋ณด ์ ์ฅ
์ผ ์ ๋ณด๋ฅผ ๋จผ์ ๋ง๋ค์ด๋ณด์.
์ผ์ ํน์ง์ ์๋์ ๊ฐ์ ๊ฒ์ด๋ค.
- ์๊ฐ๊ณผ ์ด๋ฒคํธ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ์ธ๊ฒ์ ์๊ฐ์ด ์ง๋๋ฉด์, ์๋์ผ๋ก ์๋ฃ๋๊ฐ ์งํ๋๋ค.
- ์๋ฃ๋๊ฐ 100% ์งํ๋๋ฉด ์๋ฃ๋๋ฉฐ, ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ค.
์, ์ด๋ฒคํธ๋ฅผ ์ด๋ป๊ฒ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ ์ง๊ฐ ๊ณ ๋ฏผ์ค๋ฝ๋ค.
Action ๊ฐ์ ๊ฑธ ์ง๋ ฌํ ์ํฌ ์๋ ์์ ๊ฒ ๊ฐ๊ณ , ๋จ์ํ WorkType
Enum์ ๋ง๋ค์ด์ ํ๋์ฝ๋ฉ ํด๋ณด๊ธฐ๋ก ํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public enum WorkType
{
CompleteQuest
}
public class Work
{
public WorkType workType;
public int value;
public float time;
public float curTime = 0;
public Work(WorkType workType, int value, float time)
{
this.workType = workType;
this.value = value;
this.time = time;
}
public void Tick(float tick)
{
curTime += tick;
if (IsCompleted)
{
curTime = time;
}
}
public bool IsCompleted => curTime >= time;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public void TickWorks()
{
foreach (KeyValuePair<int, List<Work>> work in Works)
{
for (int i = work.Value.Count - 1; i >= 0; i--)
{
work.Value[i].Tick(TimeManager.Tick);
if (work.Value[i].IsCompleted)
{
switch (work.Value[i].workType)
{
case WorkType.CompleteQuest:
SOManager.Instance.QuestDataBuffer.RuntimeItems[work.Value[i].value].Complete();
break;
default:
throw new ArgumentOutOfRangeException();
}
work.Value.RemoveAt(i);
}
}
}
}
์ฝ๋๊ฐ ์ด์์ง ์๋ค.
ํ๋์ฝ๋ฉํ ์ผ ์ด๋ฒคํธ๋ฅผ ๋ฐ๋ก ํจ์๋ก ๋นผ๋ฉด ์ข ๊ด์ฐฎ์์ง ๊ฒ ๊ฐ๋ค.
Work
๋ฅผ Struct์ผ๋ก ๋ง๋ค๋ฉด TickWorks
์์ ๊ฐ Work
๋ฅผ Tick์ํค๋ ๋ถ๋ถ ๋๋ฌธ์ ๋ ์ง์ ๋ถํด์ ธ์, Class๋ก ๋ง๋ค์๋ค.
Dictionary<int, List<Work>>
๋ก ์ผ๋ค์ ๊ด๋ฆฌํ๋ค.
Key๊ฐ์ผ๋ก ์ธํ์ ID๋ฅผ, Value๊ฐ์ผ๋ก ํด๋น ์ธํ์ ์ผ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค.
works๋ฅผ ํ๋ ์ด์ด๋ธ ์ธํ ์ฉ Dictionary<int, Work>
, ๋๋ฏธ ์ธํ ์ฉList<Work>
๋ก ๊ตฌ๋ถ์ํฌ๊นํ๋ค๊ฐ, ๋ฐ์ดํฐ ์ ์ฅ/๋ถ๋ฌ์ค๊ธฐ๊ฐ ๋ณต์กํด์ง ๊ฒ ๊ฐ์์ Dictionary
ํ๋๋ก ํต์ผ์์ผฐ๋ค.
๊ทธ๋์ ์ธํ์ด ํ ๋ฒ์ ํ๋์ ์ผ์ ํ ์ ์์์๋ ์ผ ์ ๋ณด๋ฅผ List
๋ก ์ ์ฅํ๋ค.
๋๊ฐ์ ID๋ฅผ ๊ฐ์ง๋ ๋๋ฏธ์ธํ์ ์ผ์ ํ ๋ฒ์ ์ฒ๋ฆฌํ๊ธฐ ์ํจ์ด๋ค.
AddWork ๊ฐ์ ํจ์์์ ํ๋ ์ด์ด๋ธ ์ธํ์ ์ผ์ ํ๋๋ง ํ ์ ์๋๋ก ๋ณ๊ฐ์ ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๊ธด ํ์ง๋ง,
๊ทธ๊ฑด ํ๋ ์ด์ด๋ธ ์ธํ๊ณผ ๋๋ฏธ ์ธํ ์ปจํ
์ด๋๋ฅผ ๋ถ๋ฆฌ์์ผ๋ ๋ง์ฐฌ๊ฐ์ง๋ผ ๋
ผ์ธ๋ก ๋๋ค.
๐ฟ ๊ฑฐ๋๋ฆฌ๋ ์ธํ ์ ํ์
์ด๋ฅผ ๋ฐํ์ผ๋ก ๊ฑฐ๋๋ฆฌ๋ ์ธํ ์๋ฅผ ํ์ํด๋ณด์.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private IEnumerator UpdateUI()
{
WaitForSeconds wait = new(.1f);
while (true)
{
int workableDollCount = SOManager.Instance.Dolls.RuntimeItems.Count;
foreach (Doll doll in SOManager.Instance.Dolls.RuntimeItems)
{
if (doll.ID == Doll.DUMMY_ID)
continue;
if (workManager.DoseDollHaveWork(doll.ID))
workableDollCount--;
}
if (workManager.Works.ContainsKey(Doll.DUMMY_ID))
workableDollCount -= workManager.Works[Doll.DUMMY_ID].Count;
text.text = $"{workableDollCount}/{SOManager.Instance.Dolls.RuntimeItems.Count} ์ธํ";
yield return wait;
}
}
ํ
์คํธ ํจ์๋ฅผ ๋ง๋ค๊ณ ํ
์คํธ ํด๋ณด์.
์๋๋ ๋๋ฏธ์ธํ์ด 10์ด์ ์ผ์ ํ๋๋ก ํ๋ ํ
์คํธ์ฝ๋๋ค.
1
2
3
4
5
[ContextMenu(nameof(TestWork))]
public void TestWork()
{
WorkManager.AddWork(Doll.DUMMY_ID, new Work(WorkType.CompleteQuest, 0, 10));
}
์ ์๋ํ๋ค.
๋ฐ์ดํฐ ์ ์ฅ/๋ถ๋ฌ์ค๊ธฐ๋ ์ ๋์ํ๋ค.
์ผ๋ฐ์ ์ธ SNG ๋ฅ์ ๊ฒ์์ ์คํ๋ผ์ธ์๋ ์๊ฐ์ด ํ๋ฅด์ง๋ง, ์ด ๊ฒ์์์๋ Cult of the Lamb ์ฒ๋ผ ๊ฒ์์ ์ ์ํด ์์ ๋๋ง ์๊ฐ์ด ํ๋ฅด๊ฒ ํ ๊ฒ์ด๋ค.
๐ ๋ง์ ์๋ขฐ
์ด์ ๋ง์ ์๋ขฐ๋ฅผ ๋ง๋ ๋ค.
์ฒ์๋ถํฐ ๋ง์ ์๋ขฐ๋ฅผ ๊ฐ์ง๊ณ ์์ํ๋ ๊ฒ์ ์ด์ํ ๊ฒ์ด๋ค.
์ฃผ๋ณ ๋ง์์์ ์จ NPC๋ฅผ ๋ง๋ค๊ณ , ๋ง์ ์๋ขฐ๋ฅผ ํ๋ ๋ฐ๋๋ก ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
๐ฟ NPC๋ก๋ถํฐ ํ์คํธ ๋ฐ๊ธฐ
NPC๊ฐ ํ์คํธ๋ฅผ ์ฃผ๊ธฐ ์ํด์๋, ์ด๋ค ํ์คํธ๋ฅผ ์ค์ง ์๊ณ ์์ด์ผํ๋ค.
NPC ์คํฌ๋ฆฝํฐ๋ธ ์ค๋ธ์ ํธ์ List<Quest>
๋ฅผ ์๋ก ์ถ๊ฐํ๊ณ ,
NPC UI๋ฅผ ๊ฐฑ์ ํ ๋, NPC๊ฐ ํ์คํธ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉด ์ ํ์ง๋ก ๋ณด์ฌ์ค๋ค.
ํ์คํธ ์ ํ์ง๋ฅผ ์ ํํ์ ๋,
๋ง์ฝ ํ์คํธ๋ฅผ ๋ฐ์ง ์์ ์ํ๋ผ๋ฉด ๋ฐ๊ณ ,
๋ง์ฝ ํ์คํธ๋ฅผ ๋ฐ์์ง๋ง ์๋ฃํ์ง ๋ชปํ ์ํ๋ผ๋ฉด ๋ฌด์,
๋ง์ฝ ํ์คํธ๋ฅผ ๋ฐ๊ณ ์๋ฃํ ์ํ๋ผ๋ฉด ๋ณด์์ ๋ฐ๋๋ก ํ๋ค.
์ด๋ฐ ์ํ๋ฅผ ํํํ๊ธฐ ์ํด ํ์คํธ ์คํฌ๋ฆฝํฐ๋ธ ์ค๋ธ์ ํธ์ QuestType
์ ์ถ๊ฐํ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void SelectQuest(int index)
{
Quest quest = curNPCData.Quests[index];
switch (quest.QuestState)
{
case QuestState.Locked:
quest.Unlock();
break;
case QuestState.Unlocked:
// ๋ํ
break;
case QuestState.Completed:
// ๋ณด์
break;
default:
throw new ArgumentOutOfRangeException();
}
UIManager.Instance.SetOverlay(MPanelType.None);
}
๋ค๋ง, ๋ง์ ์๋ขฐ๋ ๊ธฐํ ์ NPC์๊ฒ ์ง์ ๋ณด์์ ๋ฐ๋ ๋ฐฉ์์ด ์๋๋ค.
๋๋ฌธ์ case QuestState.Completed
๋ธ๋ญ์์ ์ถ๊ฐ์ ์ธ ์กฐ๊ฑด์ ๋ฌ์์ค ํ์๊ฐ ์๋ค.
1
2
3
4
5
public enum QuestType
{
Normal,
VillageQuest
}
1
2
3
4
5
6
case QuestState.Completed:
if (quest.QuestType != QuestType.VillageQuest)
{
// ๋ณด์
}
break;
์์ง ๋ชจ๋ case๊ฐ ๋ด๋ถ ๊ตฌํ์ ์๋์ง๋ง, ์ ์ฒด์ ์ธ ํ๋ฆ์ ๋ง๋ค์ด์ก๋ค.
์ถํ, ๊ฐ์ ๋ ๋ํ ์์คํ
์ ๋ง๋ค๋ฉด์ ํจ๊ป ๊ฐ์ ์ํฌ ๊ฒ.
ํ์คํธ๊ฐ ์ ๋ฐ์์ง๋ ๊ฑธ ํ์ธํ์ผ๋, ์ด์ ์๋ขฐ UI์์ ๋ง์ ์๋ขฐ๋ฅผ ์๋ฃํ๋ ๊ธฐ๋ฅ์ ๋ง๋ค์ด๋ณด์.
๐ฟ ๋ง์ ์๋ขฐ ์๋ฃํ๊ธฐ
To Be Continued..
๐ฟ Memo
๋ฉ์ดํ์คํ ๋ฆฌ NPC์ฒ๋ผ, ํ์คํธ ์ํฉ์ ๋จธ๋ฆฌ ์ ์์ด์ฝ์ผ๋ก ์ ์ ์์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.