Programing/Unity(C#)

[Error] get_persistentDataPath is not allowed to be called from a MonoBehaviour constructor

hye3193 2024. 3. 18. 18:35

GameManagerEx 스크립트 파일에서 로컬 저장 기능 구현을 위해 path 변수를 선언하는 과정에서 에러 메시지가 발생하였다

public string _path = Application.persistentDataPath + "/SaveData.json";

 

UnityException: get_persistentDataPath is not allowed to be called from a MonoBehaviour constructor (or instance field initializer), call it in Awake or Start instead. Called from MonoBehaviour 'Managers' on game object '@Managers'.
See "Script Serialization" page in the Unity Manual for further details.

 

우선 Script Serialization 문서를 참고하라길래 읽어보았다

https://docs.unity3d.com/Manual/script-Serialization.html

 

특정 함수의 경우 생성자에서 호출할 수 없다고 하는데, 클래스 변수로 경로를 입력한 게 문제인 듯하다

로컬 저장 기능과 관련하여 다른 글들을 찾아 보니, Save와 Load 함수를 호출할 때마다 path 경로를 초기화시켜주는 방식으로 구현한 경우가 몇 보여서

위와 같이 코드를 수정하였더니 일단은 에러 없이 동작한다