'Unity'에 해당되는 글 2건

  1. 2021.07.23 C# - 유니티, 직렬화(Serialization)
  2. 2014.09.18 unity Network 알아보는중...
728x90

직렬화(Serialization)

 

정의(definition)

직렬화(Serialization)는 메모리 내부의 오브젝트(object)나 오브젝트 그래프(object graph; 서로를 참조하는 오브젝트들의 집합)을 바이트(bytes)로 이루어진 스트림(stream)이나 XML 노드들로 만들어 보관되거나 전송될 수 있도록 변환하는 것을 말한다. 

역직렬화(Deserialization)는 반대로 데이터 스트림을 메모리 내부의 오브젝트나 오브젝트 그래프로 재구성하는 것을 말한다.

 

목적(purpose)

직렬화와 역직렬화는 주로 다음 두 목적으로 사용된다.

오브젝트를 네트워크나 어플리케이션 경계 상으로 전송하는 목적.

파일이나 데이터베이스로 오브젝트의 표현(representation)을 보관하는 목적. 

 

유니티에서의 직렬화

유니티(Unity)에서의 직렬화는 객체의 정보 은폐(Information Hiding)를 해치지 않으면서 

Inspector창을 통해 해당 변수를 입력 받는 용도로 사용한다.

728x90
Posted by 정망스
,
728x90

 

 

Network.Instantiate은 처음엔 네트워크 상에서 그냥 생성하는건가 보다 하고 생각했는데 아닌거 같다.

번역이 뭔가 어설프긴한데 모든 클라이언트에 instanted 한다는거 봐선 내부적으로 뭔가 RPC처럼 비슷하게 돌아가서 모든 클라이언트에게 그 오브젝트를 만들어라고 명령을 내리는 듯한 그런 구조로 돌아가는거 같다.

 

networkView를 이용해서 transform(Vector3)은 position, rotation, scale 이렇게 3개만 sync가 가능하다고 한다.

transform.parent 와 같은 hierarchy에 대한 것은 sync가 안된다고 한다.

 


Network.Instantiate를 통해 생성된 네트워크 개체는

그 개체를 생성한 클라이언트 쪽에서만 제어가 되고.. 제어된 개체는 연결된 다른 클라이언트에서
transform, animation 등이 싱크된다.
하지만 그 개체를 생성하지 않은 다른 클라이언트에서 컨트롤 하는것은 다른 클라이언트에 반영되지 않는다.

 


Network.Instantiate 는 buffered 되어.. 나중에 접속한 유저에게도 똑같이 buffered에 쌓인 순서대로  객체를 생성한다.

 

그렇지만. Network.Destroy는 buffered 되지 않기 때문에 Destroy되는 그순간 접속해 있지 않은 클라이언트들은Destroy가 되지 않는다.


그래서 해결책으로는


Network.Instantiate 할때 그룹ID를 특정 int 값으로 부여해주고.

Network.Destroy시 그룹ID로 다시 한번 Network.RemoveRPCsInGroup(그룹ID); 로 처리해주어야 한다.

 


 

networkView.RPC 메서드를 쓸때 두번째 파람인..RPCMode를 쓸때 주의하자!!


A,B 두개의 클라이언트만 접속해있을때.. 두 클라이언트에서.. 어떤 gameObject를 지우거나..

비활성화(SetActiveRecursively(false)) 하면..

그 후 접속한.. C,D 클라이언트에서도 반영이 되게 해야 하는데..

이때.. 모든 RPC 명령들이 RPC buffer에 저장이 되어 있어야만..

제대로 반영이 된다..


이때 반드시 RPCMode를 RPCMode.AllBufferd로 설정해야 한다!!

728x90
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침