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>(); }