유니티 대화 시스템 구현

박지예·2021년 9월 2일
0

공부

목록 보기
2/42

참고링크

OBjData 스크립트

public class ObjData : MonoBehaviour
{
    public int id;
    public bool isNPC;
}

여기서 각 오브젝트의 아이디와 NPC인지 아닌지를 구별해준다.

이제 여기서 각 오브젝트의 id에 맞는 대사를 출력해보자

TalkManager

 Dictionary<int, string[]> talkData;

아이디(int)와 대사(string[]) 가 있는 딕셔너리 talkData를 생성한다 talkData = new Dictionary<int, string[]>();


void GeneratorData()
   {
       talkData.Add(1000, new string[] { "안녕?", "이곳에 처음 왔구나?" });
       talkData.Add(100, new string[] { "평범한 나무 상자다" });
       talkData.Add(200, new string[] { "누군가 사용한적 있는 나무상자다" });
   }

기본 데이터 생성
참고로 실무에서는 이런 코드로 데이터를 관리하지 않는다.
(나중에 따로 확인할껏)


 public void Action(GameObject scanObj)
 {
     if (isAction) //Exit Action
         isAction = false;
     else
     {   //Enter Action
         isAction = true;
         scanObject = scanObj;
         ObjData objdata = scanObject.GetComponent<ObjData>();
         Talk(objdata.id, objdata.isNPC);
     }
     talkPanel.SetActive(isAction);
 }

여기서 확인할것은 raycastHit로 받은 오브젝트의 id와 NPC의 여부를 Talk 함수에 넣어주는 것!


void Talk(int id, bool isNPC)
 {
     string textData =  talkManager.GetTalk(id, talkindex); 
     if (isNPC)
     {
         TalkText.text = textData;
     }
     else
     {
         TalkText.text = textData;
     }
 }

그렇게 받은 아이디를 GetTalk 함수에 넣어준다


public string GetTalk(int id, int talkindex)
  {
      Debug.Log("GetTalk");
      return talkData[id][talkindex];
  }

GameManager 내부에 있는 함수. 받은 매개변수들로 위에 저장되어 있는 GeneratorData 변수 talkData의 값을 불러온다.

그러나

인스팩터 창에 멀쩡하게 떠 있는

Talk Manager가 씬 실행만 하면

missing 되었다.

해결방법


TalkManager를 GameManager 안에 넣고

void Awake()
    {
        talkManager = GetComponentInChildren<TalkManager>();
    }

profile
언젠간 바다로 갈거야!🐋

0개의 댓글