๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Personal

[๊ณต๋ชจ์ „ ํ™œ๋™] Unity ํฌ์ธํŠธ ์•ค ํด๋ฆญ - ์กฐ์‚ฌ & ๋Œ€ํ™” ์‹œ์Šคํ…œ ๊ตฌ์ถ• ๋ฐ ์ธ๋ฒคํ† ๋ฆฌ ์ •๋ณด ์ €์žฅ

728x90
๋ฐ˜์‘ํ˜•

 

 

 

 

 ์„œ๋‘

์ด๋ฒˆ ๊ธ€์€ ์ €์˜ ๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๋ถ€์™€ ๊ณต๋ชจ์ „ ํ™œ๋™์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ธ€์ด๋ฏ€๋กœ ์ •๋‹ต์ด ์•„๋‹ˆ๋ผ๋Š” ์ .  "์ด๋ ‡๊ฒŒ ํ–ˆ๊ตฌ๋‚˜" ์ •๋„๋กœ ์ƒ๊ฐํ•˜์—ฌ ์ฐธ๊ณ ์šฉ์œผ๋กœ๋งŒ ๋ด์ฃผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ฝ”๋”ฉ์—๋Š” ์ •๋‹ต์ด ์—†์œผ๋‹ˆ๊น์š”.

 

https://www.gigdc.or.kr/game/item.php?it_id=1688204158&ca_id=6020&findType=&findType2=&findType3=20&findWord=&page=6&sort1=&sort2= 

 

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<intstring[]> talkData;
    
 
    void Start()
    {
        talkData = new Dictionary<intstring[]>(); //์ดˆ๊ธฐํ™”
        GenerateData();
    }
 
 
    void GenerateData()
    {
        //Add ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€ํ™” ๋ฐ์ดํ„ฐ ์ž…๋ ฅ ์ถ”๊ฐ€
        talkData.Add(1000new string[] {"๋‚œ ์ฃฝ์ด์ง€ ์•Š์•˜์–ด.." , "๋„ˆ๋„ ๋‚  ์˜์‹ฌํ•˜๊ณ  ์žˆ๋Š”๊ฑฐ๋‹ˆ?"});
 
        talkData.Add(100new string[] { "์นผ์— ํ”ผ๊ฐ€ ๋ฌป์–ด์žˆ๋‹ค.""์•ž์— ์‹œ์ฒด์™€ ์—ฐ๊ด€์ด ์žˆ๋Š” ๊ฑธ๊นŒ?""์ผ๋‹จ ์ˆ˜์ง‘ํ•˜๊ณ  ์ธ๋ฒคํ† ๋ฆฌ๋ฅผ ํ™•์ธํ•˜์ž." });
 
        talkData.Add(200new string[] { "๋ถ€์  ์ธ๊ฐ€? ์ผ๋‹จ ์ˆ˜์ง‘ํ•˜๊ณ ,""์ธ๋ฒคํ† ๋ฆฌ๋ฅผ ํ™•์ธํ•ด๋ณด์ž." });
 
        talkData.Add(300new 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์— ํ•„์š”ํ•œ ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋‹ค ๋„ฃ์–ด ์ค๋‹ˆ๋‹ค.

 

 

 

 


๊ตฌํ˜„ ์˜์ƒ

 

 

728x90
๋ฐ˜์‘ํ˜•