오브젝트 및 NPC 를 생성해 주었다
좌부터
NPC루나,루도, 상자,책상이다
따로 DB를 쓰지않기 때문에 DICTONERY를 사용하여 상호작용할 대화등을 받아오기 위하여
public int id;
public bool isNpc;
스크립트에 정수형 Id와 bool 형 isNpc를 만들어 주어 각 오브젝트에 적용을 해주었다.
책상은 100
상자는 200
NPC루나는 1000
NPC루도는 2000
그리고 TalkManager 라는 스크립트를 생성하여 Dictionary를 생성해주어 해당하는 uid와 대화를 넣어주었다.또한
npc에서 10번 단위로 퀘스트를 넣어주어 대화를 진행할 수 있도록 하였다 .(근데 이방법은 웬만하면 db를 쓰는게 나을듯)
void GenerateData()
{
//Talk Data
//루나 :1000 루도 :2000
//책상 :100 상자 :200
talkData.Add(100, new string[] { "그냥 책상이다. " });
talkData.Add(200, new string[] { "무언가가 들어있는 상자이다. " });
talkData.Add(1000, new string[] { "안녕!! 내이름은 루나야 :0 ", "여기에 처음왔구나? :1","저쪽으로 가봐~:2" });
talkData.Add(2000, new string[] { "반갑다! 내이름은 루도 :0 ", "상자를 눌러보렴 :1" });
//Quest Data
talkData.Add(10+1000, new string[] { "어서와 :0 ", "우리 마을의 전설에 대해 알아? :1", "루도한테 물어봐:2" });
talkData.Add(11 + 2000, new string[] { "너 우리마을의 전설 들었니? :0 ", "맞아 내가 루나한테 말해줬어 :1", "그런데 그전에 내 동전좀 찾아줘 :2" });
talkData.Add(20 + 2000, new string[] { "동전좀 찾아줘 부탁할게 :1" });
talkData.Add(20 + 5000, new string[] { "동전을 찾았다" });
talkData.Add(21 + 2000, new string[] { "찾아줘서 고마워 :2" });
//Portrait Data
portraitData.Add(1000 + 0, portraitArr[0]);
portraitData.Add(1000 + 1, portraitArr[1]);
portraitData.Add(1000 + 2, portraitArr[2]);
portraitData.Add(1000 + 3, portraitArr[3]);
portraitData.Add(2000 + 0, portraitArr[4]);
portraitData.Add(2000 + 1, portraitArr[5]);
portraitData.Add(2000 + 2, portraitArr[6]);
portraitData.Add(2000 + 3, portraitArr[7]);
}
그리고 퀘스트를 진행하며 id가 변했을떄 (이부분은 진짜 공부용이라 이렇게 구성한것같다. id를 바로 바꿔버려서;;)
대화를 시도 하면 예외처리를 통해 이전 대화 또는 초기대화를 할수 있게 구성을 하였다.
public string GetTalk(int id, int talkIndex)
{
if (!talkData.ContainsKey(id))
{
if(!talkData.ContainsKey(id-id%10))
return GetTalk(id-id %100, talkIndex);
else
return GetTalk(id-id%10, talkIndex);
}
if(talkIndex == talkData[id].Length)
{
return null;
}else
return talkData[id][(int)talkIndex];
}
플레이어가 상호작용을할떄
해당하는 코드를 통해 오브젝트를 파악한다면
오브젝트의 데이터를 Talk라는 함수로 넘기고
public void Action(GameObject scObj)
{
scanObject = scObj;
ObjectData objData =scObj.GetComponent<ObjectData>();
Talk(objData.id, objData.isNpc);
// talkBox.SetActive(isAction);
//
talkPanelAnim.SetBool("isShow", isAction);
}
Talk 함수에서는 UI의 애니메이션과 화면표시
그리고 받아온 인자를 통해 어떤 오브젝트이고 npc여부를 파악해 npc 일때는 portrait이미지가 나타나도록 하였다.
'Unity공부' 카테고리의 다른 글
패럴랙스 스크롤링 (0) | 2023.05.08 |
---|---|
오브젝트 풀링 (0) | 2023.05.05 |
2D TOPDOWN(플레이어) (0) | 2023.04.24 |
2D RPG 애니메이션 문제 해결하기 (0) | 2023.04.23 |
Unity 2D 기초 (0) | 2023.04.19 |