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로 설정해야 한다!!
'Unity' 카테고리의 다른 글
[펌] 유니티 최적화 배칭, 드로우콜 (0) | 2016.08.04 |
---|---|
[펌] 유니티 메쉬 정점 갯수 최적화 (0) | 2016.08.04 |
NGUI input 한글 입력이 재대로 안될경우. (0) | 2016.07.23 |
앱을 잠시 내렸을때, 종료할때 등등의 처리 함수.. (1) | 2016.07.23 |
MonoBehaviour 오바리이딩 기능 함수 정리 (0) | 2016.07.11 |