반복 서열화 오류: Recursive Serialization is not supported.You can‘t dereference a PPtr while loading.

귀속!서열화!오류!이 버그는 간단하지 않아서 보기만 해도 소가죽처럼 느껴진다.
오류 메시지: Recursive Serialization is not supported.You can’t dereference a PPtr while loading. (Constructors of C# classes may not load objects either. See stacktrace.) 전반적으로 Unity는 귀속 서열화를 지원하지 않습니다.
출현 상황: (하나) 서열화된 클래스가 있습니다:Class1;Class1에서 Class1을 참조했습니다.예를 들면 다음과 같습니다.
[System.Serializable]
public class Class1
{
     
 	// List    
	public List<Class1> c1List;
	//   
 	//public Class1 c1;
}

(2) 서열화 가능한 클래스가 하나 있다:Class1;또 하나의 서열화 가능한 클래스가 있습니다:Class2;Class1에서는 Class2를 인용했고 Class2에서는 Class1을 인용했다.서열화 오류도 발생할 수 있습니다.예를 들면 다음과 같습니다.
[System.Serializable]
public class Class1
{
      	
 	// List Class2
 	public List<Class2> c2List;
 	// 
 	//public Class2 c2;
}
[System.Serializable]
public class Class2
{
     
	// List Class1
 	public List<Class1> c1List;
 	// 
	//public Class1 c1;
}

위의 두 가지 상황과 같이 귀속 서열화를 초래했고 가장 큰 서열화 깊이는 7이다. 그러나 Unity의 서열화는 이런 잠재적인 무한 서열화 데이터를 처리할 수 없다. Unity 2017 이전에 귀속 서열화도 하나의 Warning에 불과했다. Unity 2017 이후에 바로 Error이다. 그리고 Unity 컴파일러 환경에서 이 오류는 운행 효과에 영향을 주지 않지만 포장할 때 나타나고 포장에 실패한다.해결할 수밖에 없어요.
해결 방안: (1) 서열화의 가장 큰 역할은 컴파일러 속성 패널에서 그 수치를 관찰하거나 바꾸는 것이다. 이 부분의 코드를 다시 쓸 수 있고 귀속 서열화된 인용을 삭제할 수 있다.(2) 프로젝트를 Unity 2017 이전 버전으로 스크롤합니다. 이때 이것은 경고일 뿐 포장에 영향을 주지 않습니다.
PS: 만약에 이 문제를 해결할 때 프로젝트에 대량의 시퀀스가 귀속되는 상황이 발생하면 코드를 찾는 데 많은 시간이 걸릴 것이다.Unity 컴파일러의 콘솔 패널에서는 Warning에 따라 문제가 발생한 곳을 신속하게 포착할 수 있다.

좋은 웹페이지 즐겨찾기