
์๋
์ด๋ฒ ๊ธ์ ์ ์ ๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถ์ ๊ณต๋ชจ์ ํ๋์ ์ ๋ฆฌํ๊ณ ์ ํ๋ ๊ธ์ด๋ฏ๋ก ์ ๋ต์ด ์๋๋ผ๋ ์ . "์ด๋ ๊ฒ ํ๊ตฌ๋" ์ ๋๋ก ์๊ฐํ์ฌ ์ฐธ๊ณ ์ฉ์ผ๋ก๋ง ๋ด์ฃผ์๊ธธ ๋ฐ๋๋๋ค. ์ฝ๋ฉ์๋ ์ ๋ต์ด ์์ผ๋๊น์.
GIGDC
๊ธ๋ก๋ฒ ์ธ๋๊ฒ์์ ์ ๊ฒฝ์ง๋ํ
www.gigdc.or.kr
์ฐธ๊ฐํ ๊ณต๋ชจ์ ์ ๋ณด๋ ์ ์ฌ์ดํธ ๋งํฌ๋ฅผ ํตํด ์ ์ ์์ต๋๋ค. ์ฒซ ํ์ ๊ณผ ๊ณต๋ชจ์ ํ๋์ด๊ธฐ์ ํ์ฌ๋ ์ ๋ง ์ ์ ์ด ์๋ค์..
์์ฑ์ ํ ์ ์์๊น? ํ๋ ๊ฑฑ์ ์ด ๊ตฌํํ๋ ๋งค ์๊ฐ ์๊ฐ์ด ๋์ง๋ง, ์๊ฐ์ด ํ๋ฅด๋ฉด ์ด๊ฒ๋ ๊ฒฝํ์ด์ ์ถ์ต์ด๋ฏ๋ก ์ผ๋จ ์ต์ ์ ๋คํด๋ณด๋ ค๊ณ ํฉ๋๋ค..

ํฌ์ธํธ ์ค ํด๋ฆญ ๋ฐฉ์์ผ๋ก ๋ํ ์์คํ ๊ตฌ์ถ

ํฌ์ธํธ ์ค ํด๋ฆญ ์์คํ ๊ณผ ๋ง์ฐ์ค ํด๋ฆญ์ผ๋ก NPC๋ค์ ๋ํ ๋๋ ๋จ์๋ค์ ์กฐ์ฌํ๋ ์์คํ ์ ๊ตฌ์ถํด์ผ ํฉ๋๋ค.
์์ง์ ๋ฆฌ์์ค๊ฐ ์์ผ๋ฏ๋ก ์์ฒด์ ์ผ๋ก ๋๋ฏธ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์์คํ ์ ๊ตฌํํฉ๋๋ค.

์์ ๋น์ทํ ๋ฐฉ์์ ๊ฒ์ "๋น์ ์ ์๋ ์ ์ํ์ฌ"๋ฅผ ์ฐธ๊ณ ํ์ค ์ ์์ต๋๋ค.

๋จผ์ , Canvas๋ฅผ ์ถ๊ฐํ์ ์ ๋ํ์ฐฝ UI Image ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ค์ด ์ค๋๋ค. ์ ๋ asset store์์ ๋ฌด๋ฃ ์์ ์ ๋ค์ด๋ฐ์ ๋ฃ์ด์ฃผ์์ต๋๋ค.
๊ตฌํ์ ํ์ํ ์คํฌ๋ฆฝํธ๋ ์ด 4๊ฐ์ ๋๋ค.
1. ์ ์ฒด์ ์ธ ๊ฒ์ ๊ด๋ฆฌ ์ญํ (๋ํ๊ฐ ์ผ์ด๋ ๋ ๋๋ ์กฐ์ฌํ ๋ UI ์ฐฝ์ด ๋จ๊ฒ ๋ง๋ฌ) -> GameManager.cs
2. ๋ํ๋ด์ฉ์ ๋ง๋ค์ด ์ฃผ๊ณ ๊ด๋ฆฌํ๋ ์ญํ -> TalkManager.cs
3. ์ค๋ธ์ ํธ ๊ด๋ฆฌ ๋ด๋น ์ญํ (NPC์ธ์ง ์ฌ๋ฌผ์ธ์ง ํ๋จ) -> ObjData.cs
4. ํฌ์ธํธ ์ค ํด๋ฆญ ๊ตฌ์ถ ์ญํ -> OnClick.cs
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class GameManager : MonoBehaviour
{
public TalkManager talkManager;
public GameObject talkPanel;
public Text TalkText;
public GameObject scanObject;
public bool isAction;
public int talkIndex;
public void Action(GameObject getObjcet)
{
scanObject = getObjcet;
ObjData objData = scanObject.GetComponent<ObjData>();
Talk(objData.id, objData.isNPC);
talkPanel.SetActive(isAction); // isAction == false , ์กฐ์ฌ Ul ์ฐฝ ๋ซ๊ฒ ๋ค.
}
void Talk(int id, bool isNPC)
{
string talkData = talkManager.GetTalk(id, talkIndex);
if(talkData == null )
{
isAction = false;
talkIndex = 0; //๋ํ๊ฐ ๋๋ ๋ 0์ผ๋ก ์ด๊ธฐํ , ๋ค๋ฅธ ์ฌ๋ฌผํ๊ณ ๋ ๊ณ์ ๋ํ๋ฅผ ์งํ ํ๊ธฐ ์ํจ.
return; // ๋ , void ํจ์์์ return์ ๊ฐ์ ์ข
๋ฃ ์ญํ .
}
if (isNPC)
{
TalkText.text = talkData;
}
else
{
TalkText.text = talkData;
}
isAction = true;
talkIndex++;
}
}
|
cs |
GameManager ์คํฌ๋ฆฝํธ๋ ๊ฒ์ ์ํธ์์ฉ ์ ๋ํ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ํ ํจ๋์ ์ ์ดํ๋ ์ญํ ์ ํฉ๋๋ค.
1. ๋ณ์์ ์ค๋ธ์ ํธ ์ฐธ์กฐ๋ฅผ ์ ์ธํฉ๋๋ค:
- talkManager: TalkManager ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ณ์์
๋๋ค. ์ด ๋ณ์๋ ๋ํ ๊ด๋ฆฌ์๋ฅผ ๋ํ๋
๋๋ค.
- talkPanel: ๋ํ ํจ๋์ ๋ํ๋ด๋ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ณ์์
๋๋ค.
- TalkText: ๋ํ ๋ด์ฉ์ ํ์ํ๊ธฐ ์ํ UI ํ
์คํธ๋ฅผ ๋ํ๋ด๋ ์ปดํฌ๋ํธ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ณ์์
๋๋ค.
- scanObject: ์ํธ์์ฉ ๊ฐ๋ฅํ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๋ณ์์
๋๋ค.
- isAction: ์ํธ์์ฉ ๊ฐ๋ฅํ ์ํ์ธ์ง๋ฅผ ๋ํ๋ด๋ ๋ถ๋ฆฌ์ธ ๋ณ์์
๋๋ค.
- talkIndex ์ ์ํ ๋ณ์๋ฅผ ์ ์ธํฉ๋๋ค. ์ด ๋ณ์๋ ํ์ฌ ๋ํ ์ธ๋ฑ์ค๋ฅผ ๋ํ๋ ๋๋ค.
2. Action(GameObject getObjcet) ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค. ์ด ๋ฉ์๋๋ ์ํธ์์ฉ ๊ฐ๋ฅํ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ์ ๋ฌ๋ฐ์ ์ฒ๋ฆฌํฉ๋๋ค.
- getObjcet ๋งค๊ฐ๋ณ์๋ฅผ scanObject์ ์ ์ฅํฉ๋๋ค.
- scanObject์์ ObjData ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์ objData ๋ณ์์ ์ ์ฅํฉ๋๋ค.
- objData์์ id์ isNPC ๊ฐ์ ๊ฐ์ ธ์ Talk ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
- talkPanel์ ํ์ฑํ ์ฌ๋ถ๋ฅผ isAction ๋ณ์์ ๋ฐ๋ผ ๊ฒฐ์ ํฉ๋๋ค.
3. Talk(int id, bool isNPC) ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค. ์ด ๋ฉ์๋๋ ๋ํ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- talkManager์ GetTalk ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค. id์ talkIndex๋ฅผ ์ ๋ฌํฉ๋๋ค.
- ๊ฐ์ ธ์จ ๋ํ ๋ฐ์ดํฐ๊ฐ null์ธ ๊ฒฝ์ฐ, ๋ํ๊ฐ ๋๋ฌ์์ ๋ํ๋ด๋ ๋ณ์๋ค์ ์
๋ฐ์ดํธํ๊ณ ๋ฉ์๋๋ฅผ ์ข
๋ฃํฉ๋๋ค.
ID๋ง๋ค ์ง์ ๋ ๋ํ ๊ฐฏ์๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ํ๊ฐ ๋๋ฌ์ ๋ talkIndex ๋ณ์๋ฅผ 0์ผ๋ก ์ด๊ธฐํ ํด์ฃผ๋ ์์
์ด ๊ผญ ํ์ํจ!
- isNPC ๋ณ์์ ๋ฐ๋ผ TalkText์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ค์ ํฉ๋๋ค.
- isAction ๋ณ์๋ฅผ true๋ก ์ค์ ํ๊ณ talkIndex๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ObjData : MonoBehaviour
{
public int id;
public bool isNPC;
public Item item;
public SpriteRenderer image;
public static ObjData instance;
private void Awake()
{
instance = this;
}
}
|
cs |
ObjData ์คํฌ๋ฆฝํธ๋ ๊ฒ์ ์ค๋ธ์ ํธ์ ์์ฑ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ID์ NPC์ธ์ง ์ฌ๋ถ๋ฅผ ์ฒดํฌํฉ๋๋ค.
1. ๋ณ์๋ฅผ ์ ์ธํฉ๋๋ค:
- id: ๊ฒ์ ์ค๋ธ์ ํธ์ ๊ณ ์ ํ ์๋ณ์๋ฅผ ์ ์ฅํ๋ ๋ณ์์
๋๋ค.
- isNPC: ๊ฒ์ ์ค๋ธ์ ํธ๊ฐ NPC์ธ์ง ์ฌ๋ถ๋ฅผ ์ ์ฅํ๋ ๋ถ๋ฆฌ์ธ ๋ณ์์
๋๋ค.
- item: ์์ดํ
์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ณ์์
๋๋ค.
- image: ๊ฒ์ ์ค๋ธ์ ํธ์ ์คํ๋ผ์ดํธ๋ฅผ ๋ํ๋ด๋ SpriteRenderer ์ปดํฌ๋ํธ๋ฅผ ์ ์ฅํ๋ ๋ณ์์
๋๋ค.
โป Item ๋ณ์์ Image ๋ณ์๋ ์ธ๋ฒคํ ๋ฆฌ ์ ์ฅํ ๋ ์ฐ์ด๊ธฐ ๋๋ฌธ์ ์ง๊ธ์ ๋ฌด์ํ์
๋ ๋ฉ๋๋ค.
2. instance๋ผ๋ ์ ์ ๋ณ์๋ฅผ ์ ์ธํฉ๋๋ค. ์ด ๋ณ์๋ `ObjData` ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๋ ์ญํ ์ ํฉ๋๋ค.
3. Awake() ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค. ์ด ๋ฉ์๋๋ ๊ฒ์ ์ค๋ธ์ ํธ๊ฐ ํ์ฑํ๋๋ฉด ์ต์ด๋ก ์คํ๋ฉ๋๋ค.
- instance ๋ณ์๋ฅผ ํ์ฌ ์ธ์คํด์ค๋ก ์ค์ ํฉ๋๋ค.
Awake() ๋ฉ์๋๋ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ์์ `ObjData.instance`๋ฅผ ํตํด ํด๋น ๊ฒ์ ์ค๋ธ์ ํธ์ ์ธ์คํด์ค์ ์ ๊ทผํ ์ ์๋๋ก ํฉ๋๋ค.
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
33
34
35
36
37
38
39
40
41
42
43
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TalkManager : MonoBehaviour
{
Dictionary<int, string[]> talkData;
void Start()
{
talkData = new Dictionary<int, string[]>(); //์ด๊ธฐํ
GenerateData();
}
void GenerateData()
{
//Add ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ํ ๋ฐ์ดํฐ ์
๋ ฅ ์ถ๊ฐ
talkData.Add(1000, new string[] {"๋ ์ฃฝ์ด์ง ์์์ด.." , "๋๋ ๋ ์์ฌํ๊ณ ์๋๊ฑฐ๋?"});
talkData.Add(100, new string[] { "์นผ์ ํผ๊ฐ ๋ฌป์ด์๋ค.", "์์ ์์ฒด์ ์ฐ๊ด์ด ์๋ ๊ฑธ๊น?", "์ผ๋จ ์์งํ๊ณ ์ธ๋ฒคํ ๋ฆฌ๋ฅผ ํ์ธํ์." });
talkData.Add(200, new string[] { "๋ถ์ ์ธ๊ฐ? ์ผ๋จ ์์งํ๊ณ ,", "์ธ๋ฒคํ ๋ฆฌ๋ฅผ ํ์ธํด๋ณด์." });
talkData.Add(300, new string[] { "ํผ๊ฐ๋ฌป์ ๋ชป?", "๋จ์๊ฐ ๋ ์ ์์ผ๋", "์ผ๋จ ์์งํ๊ณ ์ธ๋ฒคํ ๋ฆฌ๋ฅผ ํ์ธํ์." });
}
//์ง์ ๋ ๋ํ ๋ฌธ์ฅ์ ๋ฐํํ๋ ํจ์
public string GetTalk(int id, int talkIndex)
{
if(talkIndex == talkData[id].Length) //๋จ์์๋ ๋ฌธ์ฅ์ด ์๋์ง
{
return null;
}
else return talkData[id][talkIndex];
}
}
|
cs |
๊ฒ์ ๋ํ ๊ด๋ฆฌ๋ฅผ ์ํ TalkManager ์คํฌ๋ฆฝํธ๋ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ , GetTalk ํจ์๋ฅผ ํตํด ์ง์ ๋ ๋ํ ๋ฌธ์ฅ์ ๋ฐํํฉ๋๋ค. GenerateData ํจ์๋ฅผ ํตํด ์ด๊ธฐ ๋ํ ๋ฐ์ดํฐ๊ฐ ์์ฑ๋ฉ๋๋ค.
1. talkData๋ผ๋ Dictionary ๋ณ์๋ฅผ ์ ์ธํฉ๋๋ค. ์ด ๋ณ์๋ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- Dictionary๋ ํค-๊ฐ ์์ผ๋ก ๊ตฌ์ฑ๋๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์
๋๋ค.
2. Start() ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค. ์ด ๋ฉ์๋๋ ๊ฒ์ ์ค๋ธ์ ํธ๊ฐ ํ์ฑํ๋ ๋ ์ต์ด๋ก ์คํ๋ฉ๋๋ค.
- talkData๋ฅผ ์ด๊ธฐํํ ํ GenerateData() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํฉ๋๋ค.
3. GenerateData() ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค. ์ด ๋ฉ์๋๋ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- Add ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํฉ๋๋ค. ํค๋ intํ id์ด๊ณ ๊ฐ์ string ๋ฐฐ์ด์
๋๋ค.
- ๊ฐ id์ ๋ํ ๋ํ ๋ฌธ์ฅ๋ค์ ๋ฐฐ์ด๋ก ์ถ๊ฐํฉ๋๋ค.
4. GetTalk(int id, int talkIndex) ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค. ์ด ๋ฉ์๋๋ ์ง์ ๋ ๋ํ ๋ฌธ์ฅ์ ๋ฐํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- talkIndex์ id๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ํ ๋ฌธ์ฅ์ ๊ฐ์ ธ์ต๋๋ค.
- talkIndex์ ๋ํ ๋ฌธ์ฅ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋น๊ตํ์ฌ, ๋ ์ด์ ๊ฐ์ ธ์ฌ ๋ฌธ์ฅ์ด ์๋ ๊ฒฝ์ฐ null์ ๋ฐํํฉ๋๋ค.
null ๋ฐํ ์ GameManager ํด๋์ค์ Talk ๋ฉ์๋๋ก ๋์ด๊ฐ If(talkData == null) {} ๋ถ๊ธฐ๋ฌธ์ ๋ง๋๊ฒ ๋ฉ๋๋ค.
- ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ (์์ง ๋ํ ๋ฌธ์ฅ์ด ๋จ์์ ๋) ํด๋น ๋ํ ๋ฌธ์ฅ์ ๋ฐํํฉ๋๋ค.
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
public class OnClick : MonoBehaviour
{
protected GameObject target;
public GameManager manager;
void Update()
{
if (Input.GetMouseButtonDown(0))
{
ShootRay();
}
}
void ShootRay()
{
target = null;
Vector2 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
RaycastHit2D hit = Physics2D.Raycast(pos, Vector2.zero, 0f);
if (hit.collider != null)
{
//Debug.Log(hit.collider.name);
target = hit.collider.gameObject;
manager.Action(target);
HitCheckObject(hit);
}
}
void HitCheckObject(RaycastHit2D targeted)
{
ISaveItem clickInterface = targeted.transform.GetComponent<ISaveItem>();
if(clickInterface != null)
{
Item item = clickInterface.ClickItem();
if (manager.isAction == false) // UI ์ฐฝ์ด ๋ซํ ๋
{
Destroy(target);
// inventory.AddItem(item, target);
Inventory.instance.AddItem(item, target);
}
}
}
}
|
cs |
ํฌ์ธํธ ์ค ํด๋ฆญ ์์คํ ๊ตฌ์ถ์ ์ํ OnClick ์คํฌ๋ฆฝํธ๋ ๋ง์ฐ์ค ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๊ณ ํด๋ฆญ๋ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ๊ฒ์ถํ์ฌ ํด๋น ์ค๋ธ์ ํธ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. GameManager์ Action() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๊ฒ์ ์ํธ์์ฉ์ ์ฒ๋ฆฌํ๋ฉฐ, ์ธํฐํ์ด์ค๋ฅผ ํตํด ์์ดํ ์ ๊ฐ์ ธ์ ์ธ๋ฒคํ ๋ฆฌ์ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํฉ๋๋ค.
โป ์ธ๋ฒคํ ๋ฆฌ ๋ด์ฉ์ ์ด๋ฒ ํฌ์คํ ์์ ์งํํ์ง ์๊ธฐ ๋๋ฌธ์ ์ธํฐํ์ด์ค ๊ด๋ จ ์ฝ๋๋ ๋ฌด์ํ์ ๋ ๋ฉ๋๋ค.
1. ๋ณ์๋ฅผ ์ ์ธํฉ๋๋ค:
- target: ํด๋ฆญ๋ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ์ ์ฅํ๋ ๋ณ์์
๋๋ค.
- manager: GameManager ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ ์ฅํ๋ ๋ณ์์
๋๋ค.
2. Update() ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค. ์ด ๋ฉ์๋๋ ๋งค ํ๋ ์๋ง๋ค ํธ์ถ๋๋ฉฐ ๋ง์ฐ์ค ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
- Input.GetMouseButtonDown(0)์ ๋ง์ฐ์ค ์ผ์ชฝ ๋ฒํผ์ด ํด๋ฆญ๋์์ ๋๋ฅผ ๋ํ๋
๋๋ค.
- ShootRay() ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
3. ShootRay() ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค. ์ด ๋ฉ์๋๋ ๋ ์ด์บ์คํธ๋ฅผ ๋ฐ์ฌํ์ฌ ํด๋ฆญ๋ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ๊ฒ์ถํฉ๋๋ค.
- target ๋ณ์๋ฅผ null๋ก ์ด๊ธฐํํฉ๋๋ค.
- ๋ง์ฐ์ค์ ํ์ฌ ์์น๋ฅผ 2D ์๋ ์ขํ๋ก ๋ณํํ์ฌ pos ๋ณ์์ ์ ์ฅํฉ๋๋ค.
- Physics2D.Raycast๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ด์บ์คํธ๋ฅผ ๋ฐ์ฌํฉ๋๋ค. pos ์์น์์ (0, 0) ๋ฐฉํฅ์ผ๋ก ๋ฐ์ฌํฉ๋๋ค.
- ๋ ์ด์บ์คํธ์ ์ถฉ๋ํ ๊ฒ์ ์ค๋ธ์ ํธ๊ฐ ์๋ ๊ฒฝ์ฐ target ๋ณ์์ ํ ๋นํ๊ณ manager.Action(target)์ ํธ์ถํฉ๋๋ค.
- HitCheckObject() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ถฉ๋ํ ์ค๋ธ์ ํธ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
4. HitCheckObject(RaycastHit2D targeted) ๋ฉ์๋๋ฅผ ์ ์ํฉ๋๋ค. ์ด ๋ฉ์๋๋ ์ถฉ๋ํ ์ค๋ธ์ ํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- targeted.transform.GetComponent<ISaveItem>()๋ฅผ ํตํด ํด๋ฆญ๋ ๊ฒ์ ์ค๋ธ์ ํธ์์ ISaveItem ์ธํฐํ์ด์ค๋ฅผ ์ฐพ์ต๋๋ค.
- ISaveItem ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ปดํฌ๋ํธ๊ฐ ์๋ ๊ฒฝ์ฐ clickInterface ๋ณ์์ ํ ๋นํฉ๋๋ค.
- clickInterface.ClickItem()์ ํธ์ถํ์ฌ ์์ดํ
์ ๊ฐ์ ธ์ต๋๋ค.
- manager.isAction์ด false์ธ ๊ฒฝ์ฐ (UI ์ฐฝ์ด ๋ซํ์ ๋), ํด๋ฆญ๋ ๊ฒ์ ์ค๋ธ์ ํธ๋ฅผ ํ๊ดดํ๊ณ Inventory.instance.AddItem(item, target)๋ฅผ ํธ์ถํ์ฌ ์์ดํ
์ ์ธ๋ฒคํ ๋ฆฌ์ ์ถ๊ฐํฉ๋๋ค.

๋ชจ๋ ์คํฌ๋ฆฝํธ๊ฐ ์ค๋น๋์๋ค๋ฉด ํ์ํ ์ค๋ธ์ ํธ๋ค์ ๋ง๋ค์ด ์ค๋๋ค.
TalkManager, GameManager, Player ์ค๋ธ์ ํธ๋ ๋น ์ค๋ธ์ ํธ๋ก ๋ง๋ค์ด ์ฃผ์์ต๋๋ค.
Survey Item์ ๊ฐ๊ฐ ์์ ์ด ๋ฃ๊ณ ์ถ์ ์ค๋ธ์ ํธ๋ค์ ๋ฃ์ผ๋ฉด ๋ฉ๋๋ค.




๊ฐ๊ฐ์ ์ค๋ธ์ ํธ Inspector์ ํ์ํ ์ปดํฌ๋ํธ๋ค์ ๋ค ๋ฃ์ด ์ค๋๋ค.
