처음부터 꿈 크게 잡아서 '나중에 다른 프로젝트에서 쓸 수 있게 해볼까?' 했다가 대가리 박살나고 질문글 써봅니다...
현재 참여 중인 프로젝트는 비주얼 노벨류 게임입니다.
아직 기획이 완전히 끝나진 않았지만 회의에서
- 기본적인 분기 (예시 : 플레이어가 버튼을 통해 누르는 선택지)
- 트리거를 통한 분기 (예시 : 특정 파일 삭제 or 어떤 npc와의 대화를 일정 횟수 반복)
가 나왔었습니다.
XNode를 통해 유니티 내부에서 편집하는거랑
CSV를 통해 편집하는 것 중 우선 CSV를 택했습니다.
근데 대화 시스템을 구현하면서 1번의 기본적인 분기는 GPT와 인터넷을 참조해서
이런 느낌으로 Choice가 있을 시, 파싱 과정에서 알아서 따로 분류가 되게 만들었습니다.
근데 여기까지 와서 다시 고민해보니,
2번의 트리거를 통한 분기를 어떻게 구현해야할지 감이 잘 잡히지 않습니다.
처음엔 관련 bool, int 타입의 트리거 변수를 관리하는 클래스를 따로 만들어서 처리하면 되겠거니 하며 안일하게 생각했는데
구현과정에서 머리 깨져보니 제 생각보다 쉽지 않다는걸 깨달았습니다.
인터넷을 통해 찾아보니, 전체 트리거에 대한 enum과 그에 대한 bool 배열을 만들어서 처리하는 것.
CSV 파일 내에서 조건문이나 함수를 추가하는 것.
같은 방법을 찾았는데,
1번은 타입이 다르거나 트리거가 많아지면 비효율적일 것 같고,
2번은 CSV 파일에서 string 타입으로 조건문을 참조하는게 뭔가 꺼림직한데,
생각하다보니 제가 너무 어렵게 생각해서 오버 엔지니어링을 하는건 아닌가 싶어서 질문글을 남겨봅니다...
요약: 대화 시스템(CSV 기반)에서 조건으로 발생하는 분기점은 어떻게 구현하나요?
(ex : 파일 삭제로 인한 분기, npc의 호감도에 의한 분기 등등...)
지금 생각나는 건 public bool CheckCondition() 함수를 가지는 scriptableobject들을 만들어 놓고, 시작 시 로드해서 딕셔너리에 넣어놓고 트리거 분기문에서 dict.TryGetValue 등으로 가져와서 체크하는 식으로 하는 건 어떰
lua 같은 가벼운 스크립트 언어 넣어야 함 단일값 측정으로 끝나는 경우 거의 없음
복잡하게 들어갈거면 브랜칭 툴 있는 거 써먹는게 나음
다들 정말 땡큐합니다 - dc App