2024년 3월 10일 일요일

Vector2 Serialize 할때 오류 발생하는 경우

Unity에서 Vector2 Serialize 를 사용하게 되면 아래와 같은 오류가 발생합니다.

SerializationException: Type 'UnityEngine.Vector2' in Assembly 'UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.

아래와같은 Vector2S 와 같은 Class로 변경해주면 사용이 가능합니다.

Vector2 로 된 변수를 Vector2S 에 넣는 것이 가능하기 때문에 Serialize 하는 변수를 Vector2S 변경하고 Vector2 값을 Vector2S 로 복사 하게끔 구현해주면 됩니다.


[Serializable]
public struct Vector2S
{
public float x;
public float y;
public Vector2S(float x, float y)
{
this.x = x;
this.y = y;
}
public override bool Equals(object obj)
{
if (!(obj is Vector2S))
{
return false;
}
var s = (Vector2S)obj;
return x == s.x &&
y == s.y;
}
public Vector2 ToVector2()
{
return new Vector2(x, y);
}
public static bool operator ==(Vector2S a, Vector2S b)
{
return (a.x == b.x) && (a.y == b.y);
}
public static bool operator !=(Vector2S a, Vector2S b)
{
return (a.x != b.x) || (a.y != b.y);
}
public static implicit operator Vector2(Vector2S x)
{
return new Vector2(x.x, x.y);
}
public static implicit operator Vector2S(Vector2 x)
{
return new Vector2S(x.x, x.y);
}
}


댓글 없음:

댓글 쓰기