unity study #1 - OnGUI()

·2022년 8월 27일
0

Unity Study

목록 보기
1/8

문제 상황

특정 경로에서 Json파일을 읽어와 뿌려주는데, 텍스트가 수정되지 않는 이슈가 발생

using System;
using System.IO;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;

namespace Test.Project
{
    public class EditJsonData : EditorWindow
    {
        // 메뉴 생성
        [MenuItem("My Window/Edit Json")]

        public static void ShowEditorWindow()
        {
            var _window = GetWindow<EditJsonData>("Window Test");
        }
        
       public static string TESTJSON_FILENAME = "user_data.json";

        void OnGUI()
        {
            string JsonData = LoadJson();            
            JsonData = GUILayout.TextField(JsonData);
        }


        public static string LoadJson()
        {
            var jsonPath = $"{Application.persistentDataPath}/{TESTJSON_FILENAME}";
            if (File.Exists(jsonPath))
            {

                string JsonString = File.ReadAllText(jsonPath);
                return JsonString;
            }
            else
            {
                return string.Empty;
            }
        }


    }
}

해결

OnGUI()에 Json데이터를 초기화하는 부분이 들어가있기 때문에, 필드를 수정해도 OnGUI()가 호출되면 다시 데이터가 경로에 저장된 값으로 초기화가 된다.

OnGUI()의 경우 매 틱마다 호출되기 때문에, 단순히 화면을 구성하는데만 사용해야 한다고 한다.

개발팀 OO님께서 처리방안에 대해 도움주셔서 버튼과 같이 이벤트를 주었을 때 데이터를 한번만 가져오고 처리하도록 수정했다.

using System;
using System.IO;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.UIElements;
using UnityEngine;
using UnityEngine.UIElements;

namespace Test.Project
{
    public class EditJsonData : EditorWindow
    {
        // 메뉴 생성
        [MenuItem("My Window/Edit Json")]

        public static void ShowEditorWindow()
        {
            var _window = GetWindow<EditJsonData>("Window Test");
        }
        
       public static string TESTJSON_FILENAME = "user_data.json";

        void OnGUI()
        {
        	jsonString = GUILayout.TextField(jsonString);
            if (GUILayout.Button("init"))
            {
                jsonString = LoadJson();
            }
        }


        public static string LoadJson()
        {
            var jsonPath = $"{Application.persistentDataPath}/{TESTJSON_FILENAME}";
            if (File.Exists(jsonPath))
            {

                string JsonString = File.ReadAllText(jsonPath);
                return JsonString;
            }
            else
            {
                return string.Empty;
            }
        }


    }
}
profile
삶을 스스로 통제하고 있다는 느낌을 받을 때 더 행복하고 성공한다.🍃

0개의 댓글