ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [๊ตฌํ˜„] json ์ด์šฉ ์œ ๋‹ˆํ‹ฐ ๋‚ด ๋Œ€ํ™” ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ 2
    UNITY/PROJECT 2021. 12. 7. 18:45

    ์ธ๋„ค์ผ์šฉ

    1. json ํŒŒ์ผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

    ์šฐ๋ฆฌ ๊ฒŒ์ž„์—์„œ๋Š” ์–ธ์–ด ๋ณ€๊ฒฝํ•˜๋Š” ์ฝ”๋“œ์—์„œ ๋ถˆ๋Ÿฌ์™”๋‹ค.

    ์˜์–ด์™€ ํ•œ๊ตญ์–ด, ์ด 2๊ฐœ๊ตญ์–ด๋ฅผ ์„œ๋น„์Šค ํ•˜๊ณ  ์žˆ๋‹ค.

    public class LanguageSaver : MonoBehaviour
    {
        ...
        
        void OnSceneLoaded(Scene scene, LoadSceneMode mode)
        {
            ...
            if(SceneManager.GetActiveScene().buildIndex != 0)
            {
                DatabaseManager dbManager = FindObjectOfType<DatabaseManager>();
                DialogueParser theParser = FindObjectOfType<DialogueParser>();//parser์„ ์–ธ
                Dialogue[] dialogues;
                
                if (languageIndex == 0)
                {
                    dbManager.en = false;
                }
                else if (languageIndex == 1)
                {
                    dbManager.en = true;
                }
                
                if (dbManager.en)
                    dialogues = theParser.Parse("Dialogue_EN");
                else
                    dialogues = theParser.Parse("Dialogue_KR");
                for (int i = 0; i < dialogues.Length; i++)
                {
                    dbManager.dialogueDic.Add(i, dialogues[i]);
                }
            }
        }
    
        ...
    }

    ์ด ์ฝ”๋“œ๋Š” DontDestroyOnLoad๋กœ ๋˜์–ด์žˆ์–ด์„œ ํ•œ๋ฒˆ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๋ฉด ๊ณ„์† ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋‹ค.

    DatabaseManager๋ผ๋Š” ์Šคํฌ๋ฆฝํŠธ์˜ en์ด๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ true๋ฉด ์˜์–ด, flase๋ฉด ํ•œ๊ตญ์–ด๋กœ ํ•ด๋†“์•˜๋‹ค.

    (๋ณด๊ธฐ ๋ถˆํŽธํ•˜๊ฒŒ ์™œ๊ทธ๋žฌ์ง€...)

    (์ด ๋ณ€์ˆ˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์œ„์น˜๋Š” ์‹ ๊ฒฝ ์“ธ ํ•„์š” ์—†๊ณ  ์–ด๋””์— ์žˆ๋˜ ๋Œ€ํ™” ์–ธ์–ด ์ข…๋ฅ˜ ๋ณ€์ˆ˜์ด๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.)

    DialogueParser๋ผ๋Š” ์Šคํฌ๋ฆฝํŠธ์˜ Parseํ•จ์ˆ˜์— ํ•ด๋‹น ์–ธ์–ด๋ผ๋ฉด ๋ถˆ๋Ÿฌ์™€์•ผ ํ•˜๋Š” jsonํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๋„ฃ์–ด์ค€๋‹ค.

    (์˜์–ด๋ฒ„์ „์€ Dialogue_EN.json, ํ•œ๊ตญ์–ด๋ฒ„์ „์€ Dialogue_KR.json์ด๋‹ค)

    ๊ทธ๋ ค๋ฉด theParser.Parse๋Š” ํ•ด๋‹น ์–ธ์–ด์˜ ๋ชจ๋“  ๋Œ€ํ™” ๋‚ด์šฉ์˜ Dialogue(์ด๋ฆ„, ํ•ด๋‹น ์ด๋ฆ„์˜ ๋Œ€ํ™”๋‚ด์šฉ ๋ฆฌ์ŠคํŠธ) ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค.

    Dialogue๋Š” ๋Œ€ํ™” ์ƒ๋Œ€์™€ ์ด ์ƒ๋Œ€์™€ ๋‚˜๋ˆŒ ๋Œ€ํ™” ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๋ฐฐ์—ด์ด๋‹ค.

    public class Dialogue
    {
        public string name;
        public string[] contexts;
    }

    ๊ฐ„๋‹จํ•˜๊ฒŒ DialogueParser๋กœ ๋Œ€์‚ฌ ๋‚ด์šฉ์„ ๋ฐ›์•„์™€์„œ DatabaseManager๋กœ ๋นผ๋‹ค ์“ด๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

     

    2. DialogueParser : jsonํŒŒ์ผ ๋ฐฐ์—ด๋งŒ๋“ค๊ธฐ

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using LitJson;
    using System.IO;
    
    public class DialogueParser : MonoBehaviour
    {
        public Dialogue[] Parse(string _FileName)
        {
            List<Dialogue> dialogueList = new List<Dialogue>();//๋Œ€์‚ฌ ๋ฆฌ์ŠคํŠธ 
            TextAsset dialogueString = Resources.Load<TextAsset>(_FileName);
            JsonData dialogueData = JsonMapper.ToObject(dialogueString.ToString());
    
            for (int i = 0; i < dialogueData.Count;i++)
            {
                Dialogue dialogue = new Dialogue();
                dialogue.name = dialogueData[i]["name"].ToString();
                List<string> contextList = new List<string>();
                for(int j = 0; j < dialogueData[i]["lines"].Count; j++)
                {
                    contextList.Add(dialogueData[i]["lines"][j]["line"].ToString());
                }
                dialogue.contexts = contextList.ToArray();
                dialogueList.Add(dialogue);
            }
            return dialogueList.ToArray();//๊ฐ ์บ๋ฆญํ„ฐ์˜ ๋Œ€์‚ฌ๋“ค ๋ฐฐ์—ด๋กœ ๋ฆฌํ„ด
        }
    }

    ๋”ฐ๋ผ ์ฝ์–ด๋ณด๋ฉด ์„ค๋ช… ์—†์ด ์ถฉ๋ถ„ํžˆ ์ดํ•ด ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค!

    FileName์€ ์•„๊นŒ ๋ฐ›์€ Dialogue_EN, Dialogue_KR ์ด๊ฑฐ๋‹ค.

     

    LitJson์„ ์‚ฌ์šฉํ–ˆ๋‹ค. Unity์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ๋Š” JsonUtility์™€ ๋น„์Šทํ•œ ๊ฒƒ์ธ๋ฐ

    ๋‚˜์ค‘์— ์„ค๋ช…ํ•  ๊ธฐํšŒ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์„ค๋ช…ํ•  ๊ฒƒ์ด๋‹ค. ์ผ๋‹จ ๊ถ๊ธˆํ•˜๋ฉด ๊ตฌ๊ธ€๋ง ํ•ด๋ณด์„ธ์—ฌ

     

    JsonData๋กœ ๋ฐ›์€ ๋ฐฐ์—ด์„ ํ•˜๋‚˜์”ฉ ๋œฏ์–ด ๋Œ€ํ™”๋ณ„(๋งˆ๋””๋ณ„ XX ๋งˆ๋””๋Š” List<string>์œผ๋กœ ๋ฌถ์–ด๋ฒ„๋ฆฐ๋‹ค.)๋กœ List<Dialogue>ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

     

    3. DatabaseManager : index๋กœ ๋Œ€์‚ฌ ์กฐํšŒ

    public class DatabaseManager : MonoBehaviour
    {
        public bool en = false;//์˜์–ด ์—ฌ๋ถ€
        public Dictionary<int, Dialogue> dialogueDic = new Dictionary<int, Dialogue>();
    
        ...
    
        public string GetDialogue(int id, int index)
        {
            if (index == dialogueDic[id - 1].contexts.Length)
                return null;
            else
                return dialogueDic[id - 1].contexts[index];
        }
    }

    ์œ„์—์„œ ๋งŒ๋“ค์–ด์ง„ ๋ฐฐ์—ด์„ index๋กœ ์กฐํšŒ ๋”ฑ ๋˜๊ฒŒ index, Dialgoueํ˜•ํƒœ์˜ Dictionary์— ์ตœ์ข… ์ €์žฅํ•ด์ค€๋‹ค.

    (์ฝ”๋“œ ๋ถ„๋ฆฌ, ์กฐํšŒ ํŽธ๋ฆฌ์„ฑ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ํ–ˆ์ง€๋งŒ ์ € ์œ„ ์ฝ”๋“œ์—์„œ ๋ฐ”๋กœ Dictionary์— ๊ฝ‚๋˜์ง€ ํ•ด๋„ ๋  ๊ฒƒ ๊ฐ™๊ธด ํ•˜๋‹ค.)

     

    ์ด์ œ GetDialogue๋กœ (์—ฌ๊ธฐ์„œ id๊ฐ€ jsonํŒŒ์ผ index๋ฅผ ์˜๋ฏธํ•˜๊ณ  index๋Š” ์ด ๋Œ€ํ™” ๋ช‡๋ฒˆ ์งธ ๋งˆ๋””์ธ์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค ์—ฌ๊ธฐ์„œ ๋ณ€์ˆ˜ ์ด๋ฆ„์ด ๋˜ ์„ž์˜€๊ตฐ...ใ… ใ… ) ๋ช‡ ๋ฒˆ์งธ ๋Œ€ํ™”(id)์˜ ๋ช‡ ๋ฒˆ์งธ ๋งˆ๋””(index)์ธ์ง€ ๋”ฑ ๋”ฑ ์ˆซ์ž ๋„ฃ์–ด์„œ ๋”ฑ ๋ถˆ๋Ÿฌ์ฃผ๋ฉด ๋์ด๋‹ค!

     

    ์ด ๋ถ€๋ฅด๋Š” ๊ฒƒ์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์œผ๋กœ ๋„˜๊ธฐ๊ฒ ๋‹ค... ๊ตฌ๋Ÿผ ์•ˆ๋…•

     

     

    ๊ทธ๋ฆฌ๊ณ  ์ด๊ฑฐ ์ฒ˜์Œ ๊ตฌํ˜„ํ•  ๋•Œ ์ด ์˜์ƒ์„ ๋งŽ์ด ์ฐธ๊ณ ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.

    ๋‚˜ํ•œํ…Œ ํ•„์š” ์—†๋Š” ๊ธฐ๋Šฅ ๋นผ๊ณ  ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ

    ๋ชป ์•Œ์•„๋ณผ ์ •๋„๋กœ ์ฝ”๋“œ๊ฐ€ ๊ต‰์žฅํžˆ ๊ฐ„๋‹จํ•ด์ง€๊ณ  ๋งŽ์ด ๋ฐ”๋€Œ๊ธด ํ–ˆ๋‹ค.

    https://www.youtube.com/watch?v=N4fudqV49TU 

     

Designed by Tistory.