180bpm

Unity3D의 Serialization 본문

Develop/Unity

Unity3D의 Serialization

powdersnow 2016. 2. 3. 12:42

1. 개요


기획에서 SkillData class를 editor에서도 볼수 있게 해달라는 요청이 왔다.



2. 코드


SkillData는 Creature class에 has-a관계로 있다.


class player : creature
{
    SkillData data;
}
class SkillData
{
    public int index;
    public Dictionary<stringstring> eff;
}

이런 느낌.



3. 문제 발생


기획 요청대로 SkillData에 Serializable 속성 먹이는 순간 오류 속출.

data 변수에 할당한적이 없는데 null체크가 넘어가는 문제가 생겼다.

그래서 SkillData의 eff 변수에 접근하는데 eff는 할당된적 없으니 null exception;



4. 해결


http://docs.unity3d.com/kr/current/Manual/script-Serialization.html


문서를 확인해보면 다음과 같은 내용이 있다.

시리얼라이저는 null을 지원하지 않습니다. 오브젝트를 직렬화했을 때 필드가 null인 경우, 그 형태의 새로운 오브젝트를 인스턴스화하고 그것을 직렬화합니다. 

SkillData index가 0인 경우는 할당이 안된것으로 판단하고 처리하려 했으나..

관련 코드가 흩어져있어서 바로 처리하기엔 불가능하다고 판단하고 우선 롤백.



5. 다음엔 어떻게


null 체크 이후에 접근해야 할 객체 타입의 변수도 null 체크를 하거나,

null 체크 이후 리터럴 값 체크 하는 식으로 넘어가야 하나 싶다.

- 우리는 skillData의 index가 0인경우 값이 없는것으로 간주함.

Comments