Unity/기록

NPC 대화창 구현

우대비 2024. 6. 22. 00:45
반응형

 

 

NPC와의 대화 시스템을 구현했습니다.

 

 

JustKnight/Assets/Resources/dialogues/npc_01/quest_01.json at main · znlsnel/JustKnight

2D Unity Project. Contribute to znlsnel/JustKnight development by creating an account on GitHub.

github.com

Json을 이용하여 모든 대본을 쉽게 관리할 수 있게 하였습니다.

 

 

Dialogue Handler

 

JustKnight/Assets/Scripts/UI/DialogueHandler.cs at main · znlsnel/JustKnight

2D Unity Project. Contribute to znlsnel/JustKnight development by creating an account on GitHub.

github.com

public class Response
{
    public List<string> text;
    public int next;
}

public class Dialogue
{
    public List<string> text;
    public List<Response> responses; 
    public string quest;
}

public class Conversation
{
    public string id; 
    public string npc;
    public List<Dialogue> dialogues;
}

Json의 형식입니다. NPC의 대화 목록인 Dialogue가 있으며 그에 대한 응답인 Response가 있습니다.

 

{
    "id" : 0,
    "text" : 
    [
        "어서오게 젊은이! 당신 같이 젊은 고양이는 오랜만이구만 껄껄",
        "그래! 이곳에는 어쩐일인가"
    ],
    "responses": 
    [
        {
            "text": 
            [
                "이곳에 푸른 눈의 고양이가 있다고 해서 왔습니다.",
                "혹시 알고 있는게 있습니까?"
            ],
            "next": 1
        }

    ]
},
{
    "id" : 1,

    "text" :
    [
        "흠.. 푸른 눈의 고양이라.. 그러고 보니 철수 녀석이 그런 얘기를 했던 것 같은데.."
    ],
    "responses":
    [
        {
            "text": 
            [
                "무슨 이야기인지 들어볼 수 있겠습니까?"
            ],
            "next": 2 
        }
    ]

},

각 대본에는 id값이 있으며 플레이어 응답별로 다음 대본의 index값을 가지고 있습니다.

 

 

{
    "id" : 2,

    "text" :
    [
        "그 전에 내 부탁 하나 들어줄 수 있겠나?",
        "뒷 산에 가서 몬스터 10마리만 잡아주게"
    ],
    "responses":
    [
        {
            "text": 
            [
                "싫습니다."
            ],
            "next": 6

        },

        {
            "text": 
            [
                "알겠습니다."
            ],
            "next": 3
        }
    ]
},

{
    "id" : 3,
    "text" :
    [
        "고맙네.."
    ],
    "responses":
    [
        {
            "text": 
            [
                "(몬스터 잡으러 가기)"
            ],
            "next": -5
        }
    ],
    "quest" : "Quest_1"
},
{
    "id" : 5,

    "text" :
    [
        "부탁합세.. 뒷 산에서 몬스터 10마리 일세!"
    ],
    "responses":
    [
        {
            "text": 
            [
                "네 다녀오겠습니다"
            ],
            "next": -5
        }
    ]
},

대화가 끝나는 부분은 next에 음수를 넣어주었고

다음에 대화를 시작하면 양수로 변환한 next 에서 대화가 시작되도록 하였습니다.

quest를 받으면 quest의 id를 입력받게 하였고

다음에 구현하게될 quest manager와 연동할 수 있는 길을 만들었습니다.

각 대본을 실행하기 위한 선행 퀘스트 목록도 넣을 수 있겠습니다.

 

 

 

 

반응형
LIST

'Unity > 기록' 카테고리의 다른 글

NPC 대화, 퀘스트 시스템  (2) 2024.09.02
상호작용 기능 구현  (0) 2024.06.22
인벤토리 기능  (0) 2024.06.13
Item System 구현  (0) 2024.06.08
Unity Shader Hp Bar  (0) 2024.05.14