🐧 들어가기 앞서

오디오 작업은 어느정도 얼추 마무리 됐다.

단발, 점사, 연발 사운드 구성이 고민이다.

내일 얘기해봐야겠다.


🐧 오늘 배운 것

대사창 만들기!


🐧 기억할 것 & 진행

Dialogue

유니티에서 대사창을 구현하려면,

Json을 이용해 대사를 구현할 수 있다.

Json

{
    "dialogues": [
        {
            "name": "Sgt. Collins",
            "dialogue": "반갑다 제군. \n훈련센터에 온 것을 환영한다."
        },
        {
            "name": "Sgt. Collins",
            "dialogue": "나는 콜린 중사다."
        },
        {
            "name": "Sgt. Collins",
            "dialogue": "제군은 이곳에서 사격 연습을 진행할 수 있다."
        }
    ]
}

Unity

  • Dialogue.cs
using System.Collections.Generic;

[System.Serializable]
public class Dialogue
{
    public string name;
    public string dialogue;
}
  • DialogueList.cs
using System.Collections.Generic;

[System.Serializable]
public class Dialogue
{
    public string name;
    public string dialogue;
}
  • DialogueManager.cs
using UnityEngine;
using TMPro;
using System.IO;

public class DialogueManager : Singleton<DialogueManager>
{
    public TextMeshProUGUI nameText;
    public TextMeshProUGUI descriptsText;

    private DialogueList dialogueList;
    private int currentDialogueIndex = 0;

    void Start()
    {
        // JSON 파일에서 대화 리스트 가져오기

        string path = Application.dataPath + "/Dialogues/Dialogues.json";
        string json = File.ReadAllText(path);
        dialogueList = JsonUtility.FromJson<DialogueList>(json);

        // 첫 번째 대사 표시하기
        DisplayDialogue();
    }

    void Update()
    {
        // 엔터 버튼이 눌렸을 때 다음 대사 표시하기
        if (Input.GetKeyDown(KeyCode.Return))
            NextDialogue();
    }

    void DisplayDialogue()
    {
        if (currentDialogueIndex < dialogueList.dialogues.Count)
        {
            nameText.text = dialogueList.dialogues[currentDialogueIndex].name;
            descriptsText.text = dialogueList.dialogues[currentDialogueIndex].dialogue;
        }
        else
        {
            Debug.Log("End of dialogues.");
            // 모든 대사가 끝났을 때 처리 코드 추가...
        }
    }

    void NextDialogue()
    {
        currentDialogueIndex++;

        if (currentDialogueIndex >= dialogueList.dialogues.Count)
            currentDialogueIndex = 0;  //대화가 마지막까지 가면 처음으로 돌아간다.

        DisplayDialogue();
    }
}
  1. JSON 파일 경로 설정
  • Application.dataPath는 프로젝트의 'Assets'폴더를 가리킨다.
    이 경로에, "/Dialogues/Dialogues.json"을 더해 JSON의 전체 경로를 얻는다.
  1. 파일 읽기
  • File.ReadAllText(Path)함수를 사용하여 JSON 파일의 내용을 문자열 형태로 읽어온다.
  1. JSON 파싱
  • JsonUtilituy.FromJson(json) 함수는 JSON 문자열을 파싱하여 지정한 타입(T)의 객체를 생성한다.

🐧 게임에 구현한다면?


🐧 내일 할 일

총기 사운드 다듬기

대사창 사운드 추가하기, 완성하기.

0개의 댓글