본문 바로가기
개발일지/게임개발

[유니티 게임 개발] 동방을 걷다 프로젝트 7 - 대화창 구현(excel,txt), SCG 애니메이션 추가 2024 05 18(AM 01:00)

by 라이티아 2024. 5. 23.

현재 듣고있는곡

 

【Yuzuki Yukari feat. IA】 Dolls 【Vocaloid】

최근 찾아서 듣고있는 곡이다, 어딘가 묻혀있는 곡인데, 코드가 괜찮아서 추천한다

 

이제 대화창을 메인씬으로 끌고 와야되는데 방식이 조금 이상했던 것 같다

 

스크립트 내에서 대사를 적는건 비효율적이라는 이야기를 들었다

 

그래서 엑셀, json, txt등 여러가지를 확인해보고 있다

 

이하는 txt의 연습사항이다

void Start()
    {
        string currentText = txt.text.Trim();  // 마지막 줄바꿈 문자를 제거합니다.
        string[] lines = currentText.Split('\n');  // 각 줄을 분리합니다.
        rowSize = lines.Length;
        colSize = lines[0].Split('\t').Length;

        Sentence = new string[rowSize, colSize];

        for (int i = 0; i < rowSize; i++)
        {
            string[] columns = lines[i].Split('\t');
            for (int j = 0; j < colSize; j++)
            {
                Sentence[i, j] = columns[j];
                Debug.Log(i + "," + j + "," + Sentence[i, j]);
            }
        }
       
        for (int i = 0; i < rowSize; i++)
        {
            for (int j = 0; j < colSize; j++)
            {
                Debug.Log(i + "," + j + "," + Sentence[i, j]);
            }
        }
    }

2by- 배열을 사용한 방법이다, 잘 써먹으면 효율적일 것 같다

 

 

일단 하쿠레이 신사로 가는 방법을 전글과 같이 카메라 전환법으로 만들어 보자

using UnityEngine;
using UnityEngine.SceneManagement;

public class goto_reimu : MonoBehaviour
{
    // 버튼을 눌렀을 때 호출되는 함수
    public void GoToReimuScene()
    {
        SceneManager.LoadScene("Reimu"); // "Reimu" 씬으로 이동
    }
}

현재는 씬을 물리적으로 이동시키고 있다

 

이것을 카메라 전환으로 바꿔보자

if(isCameraActive == 1){
            camera1.enabled = true;
            camera2.enabled = false;
            camera3.enabled = false;
            camera4.enabled = false;
        }
        else if(isCameraActive == 2){
            camera1.enabled = false;
            camera2.enabled = true;
            camera3.enabled = false;
            camera4.enabled = false;
        }
        else if(isCameraActive == 3){
            camera1.enabled = false;
            camera2.enabled = false;
            camera3.enabled = true;
            camera4.enabled = false;
        }
        else if(isCameraActive == 4){
            camera1.enabled = false;
            camera2.enabled = false;
            camera3.enabled = false;
            camera4.enabled = true;
        }

카메라 매니저를 또 추가해준다

if(player.ismove == true && C.isCameraActive == 1){
            World_UI.SetActive(true);
            Shop_UI.SetActive(false);
            Fight_UI.SetActive(false);
            Hakurei_UI.SetActive(false);
        }
        else if(player.ismove == false && C.isCameraActive == 2){
            World_UI.SetActive(false);
            Shop_UI.SetActive(true);
            Fight_UI.SetActive(false);
            Hakurei_UI.SetActive(false);
        }
        else if(player.ismove == false && C.isCameraActive == 3){
            World_UI.SetActive(false);
            Shop_UI.SetActive(false);
            Fight_UI.SetActive(true);
            Hakurei_UI.SetActive(false);
        }
        else if(player.ismove == false && C.isCameraActive == 4){
            World_UI.SetActive(false);
            Shop_UI.SetActive(false);
            Fight_UI.SetActive(false);
            Hakurei_UI.SetActive(true);
        }

UI 매니저도 추가해준다

 

public GPSManager player;
    public CameraSwitch C;
    // 버튼을 눌렀을 때 호출되는 함수
    public void GoTo()
    {
        player.ismove = false;
        C.isCameraActive = 4;
    }

버튼도 수정해준다

카메라를 추가후 연결한다

 

그후 대충 비슷하게 만든다

 

이제 여기서 txt를 쓸지 excel을 쓸지같은 여부를 결정해야 한다

 

txt를 사용하기로 결정했다

 

 

Walk_in_touhou/test_F/txt/text_manager.cs at main · NoNamed02/Walk_in_touhou

동방 프로젝트기반 안드로이드 RPG + 미니게임 + GPS 미연시 게임프로젝트(Unity) - NoNamed02/Walk_in_touhou

github.com

(너무 길어서 깃 주소로 대체)

 

간단히 말하면 txt파일을 가져와서 \t, \n으로 행, 열로 찢어주는 매커니즘의 스크립트이다

 

이렇게 하면 이후 [1][5]같이 2차원 배열에서 특정 장소를 지정하는 것으로 편하게 대화를 구현할 수 있으며, 이벤트 구현도 쉬워진다