목표
엑셀로 제작한 CSV 파일을 사용한 대화 데이터 관리
대화창 제작
튜토리얼 제작
(작업기간 2023.08.30 ~ 09.02 (4일 소요))
1. 엑셀로 제작한 CSV 파일 파싱
CSV 리더를 사용하여 제작
※ Assets / Resources 폴더안에 넣고 사용해야한다.
ㄴ QuestNum 헤더를 기준으로 퀘스트 구분
ㄴ CSV 활용이 미숙해 기록을 나중에 봐도 헷갈릴 수 있으니 코드 첨부
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class TutorialText : MonoBehaviour
{
public GameObject dialogObject;
public TextMeshProUGUI logName;
public TextMeshProUGUI logConversation;
public bool logSetActive = true; // 대화창 활성화
public int i = 0; // 현재 연결 중인 CSV 파일의 데이터 행 번호 (0: 헤더)
public int questNum = 1; // 퀘스트 번호
List<Dictionary<string, object>> data;
private void Start()
{
data = CSVReader.Read("튜토리얼 대화");
dialogObject.SetActive(false);
FindDialog();
}
private void Update()
{
if(logSetActive) // 대화 활성화
{
dialogObject.SetActive(true);
if (Input.GetKeyDown(KeyCode.Return)) // 엔터를 눌러 진행
{
Debug.Log("엔터 입력");
Debug.Log("QuestNum : " + questNum);
Dialog(questNum.ToString());
}
}
}
public void FindDialog() // 현재 퀘스트에 맞는 데이터 찾기
{
for (i = 0; i < data.Count; i++)
{
if (data[i]["QuestNum"].ToString() == questNum.ToString())
{
Dialog(questNum.ToString());
break;
}
}
}
void Dialog(string _QuestNum)
{
Debug.Log(_QuestNum);
Debug.Log("i : " + i);
Debug.Log("data.count" + data.Count);
if (data.Count <= i) // 데이터 최대 범위 이내 일 경우 (현재 i 가 data.Count를 넘으면 범위 벗어남)
{
dialogObject.SetActive(false);
logSetActive = false;
}
else if (data[i]["QuestNum"].ToString() == _QuestNum) // 현재 진행 퀘스트
{
logName.text = data[i]["Name"].ToString();
logConversation.text = data[i]["Content"].ToString();
i++;
}
else // 현재 진행 퀘스트가 아닐 경우 닫고 탐색
{
dialogObject.SetActive(false);
logSetActive = false;
FindDialog();
}
}
}
|
cs |
|
|
2. 대화창 제작
https://assetstore.unity.com/packages/2d/gui/fantasy-wooden-gui-free-103811
- 해당 에셋의 이미지를 사용하여 제작
- UI 세부에 대화 상대 이름과 대화 내용을 분할하여 제작
ㄴ TutorialText.cs 에서 불러온 데이터를 넣어 출력한다.
- 엔터 입력 시 다음 대화 내용 출력되게 한다.
- 현재 대화 내용이 끝나면 logSetActive를 false로 변경하면서 같은 대화가 반복되지 않고 끝나도록 한다.
ㄴ questNum 이 변경되면 true로 변경해 대화 내용을 출력 할 수 있도록 한다.
3. 튜토리얼 제작
- 캐릭터의 기본 움직임에 관한 튜토리얼 제작
- 캐릭터가 지정된 Spot에 도달할 경우 다음 위치 지정
ㄴ spot 위치가 저장된 오브젝트를 참조하여 이동
ㄴ 이동 시 바로 다음 퀘스트 대화 출력 (대화 중인 내용이 남아있더라도 전환시킴)
ㄴ Spot 에는 미니맵에만 보이는 마커를 만들어 줄어들고 커지는 로직을 반복시켜 블링크 효과를 주어 플레이어가 쉽게 알 수 있도록 함
4. 결과물
※ 튜토리얼을 모두 만들고 업로드 하려했으나 CSV를 처음 사용해봐서 배우는데 시간이 걸려 전반부 업로드
※ 스팟 방향으로 캐릭터 화면에서 이펙트 처리 추가할 예정
'유니티 게임 개발 > 3D Portfolio' 카테고리의 다른 글
[유니티] 3D Portfolio #9 퀘스트 시스템 추가, 전투 판정 수정 (0) | 2023.09.23 |
---|---|
[유니티] 3D Portfolio #8 퀘스트 시스템 구현, 전체적인 리팩토링 (0) | 2023.09.13 |
[유니티] 3D Portfolio #6 전투 시스템 제작 (0) | 2023.08.29 |
[유니티] 3D Portfolio #5 자동문 제작 (0) | 2023.08.25 |
[유니티] 3D Portfolio #4 전투 모션 구현 (0) | 2023.08.22 |