본문 바로가기

Unity

[Unity] npc와 대화를 해보자(1)

728x90

npc와 대화하기 위한 코드에 대해 설명하겠습니다.

 

1
2
3
4
5
6
7
8
9
10
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class ObjectData : MonoBehaviour
{
    public int id;
    public bool isNpc;
}
 

 

가장 먼저 오브젝트의 정보를 따로 저장해 줄 ObejctData 스크립트를 만든다.

 

  • id - 오브젝트의 id를 저장할 변수이다.
  • isNpc - 오브젝트가 사물인지 npc인지 저장할 변수이다.

나중에 이 변수들로 오브젝트들을 구분하여 대화 내용이 적절하게 출력되게 해줄 것이다.

 

1
2
3
4
5
6
7
8
9
10
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class TalkManager : MonoBehaviour
{
    Dictionary<intstring[]> talkData;
    Dictionary<int, Sprite> portraitDate;
 
    public Sprite[] portraitSprite;

 

talkData - 대화에 관련한 정보를 저장할 변수이다.

portraitData - 대화하고 있는 오브젝트의 사진을 저장할 변수이다.

portraitSprite - portraitData를 초기화 해줄 Sprite를 저장할 변수이다.

 

1
2
3
4
5
6
void Start()
    {
        talkData = new Dictionary<intstring[]>();
        portraitDate = new Dictionary<int, Sprite>();
        MakeData();
    }

 

변수들의 값을 초기화 해주고 MakeData 함수를 실행해준다.

 

1
2
3
4
5
6
7
8
void MakeData()
    {
        talkData.Add(1000new string[] { "안녕?""이 곳에 처음 왔구나" });
        talkData.Add(2000new string[] { "처음 보는 얼굴인데""누구야??" });
 
        portraitDate.Add(1000, portraitSprite[0]);
        portraitDate.Add(2000, portraitSprite[1]);
    }

 

MakeData 함수는 talKData와 portraitData에 id와 대화 내용 또는 오브젝트의 이미지를 초기화해준다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 public string GetTalk(int id, int talkIndex)
    {
        if (talkIndex == talkData[id].Length)
        {
            return null;
        }
        else
            return talkData[id][talkIndex];
    }
 
    public Sprite GetSprite(int id)
    {
        return portraitDate[id];
    }
}

 

GetTalk 함수는 id와 talkIndex를 인자로 받아 talkData에 있는 대화 내용들을 반환해주다가 더 이상 대화 내용이 없다면 null값을 반환해주는 함수이다.

 

GetSprite 함수는 id를 이용해 오브젝트의 사진을 반환해준다.

 

나머지 코드는 2편에서 마저 설명하겠다.

 

728x90