Photon에서 RPC를 통해 동기화할 때나 PhotonSerializeView를 통해 동기화할 때나 동기화할 수 있는 데이터 타입에 제한이 있다. 특히 Photon을 사용할 때 게임 오브젝트 자체를 동기화하려고 하면 안 되는 경험을 많이 해보았을 것이다. Photon에서 동기화할 수 있는 데이터 타입에 제한이 있어서 그렇다. 동기화하고자 하는 변수가 지원하는 데이터 타입에 포함되어 있지 않으면 동기화할 수 없고, 따로 사용자 정의를 통해 동기화해주어야 한다.
아래 사이트에 들어가면 친절하게 설명되어 있다.
Photon에서 동기화할 수 있는 데이터 타입
Photon의 직렬화(Serialization) | Photon Engine
doc.photonengine.com
정리하자면, 기본적인 C# 데이터 타입은 지원하나, 그 외의 데이터 타입은 직접 사용자 정의하여 Photon에게 알려주어야 한다는 말이 된다.
기본 숫자, 문자열
웬만한 숫자와 문자열 타입은 다 되는 것을 알 수 있다. char는 안 되는 것 같으니 string으로 넘기자.
타입 (C#) | 크기 [bytes] | 설명 |
byte | 2 | bit unsigned |
boolean | 2 | true or false |
short | 3 | 16 bit |
int | 5 | 32 bit |
long | 9 | 64 bit |
float | 5 | 32 bit |
double | 9 | 64 bit |
string | 3 + size( UTF8.GetBytes(string) ) | < short.MaxValue length |
Array, Hashtable, Dictionary
int[], float[] 등 배열도 넘길 수 있다.
타입 (C#) | 크기 [bytes] | 설명 |
byte-array | 5 + 1 * length | < int.MaxValue length |
int-array | 5 + 4 * length | < int.MaxValue length |
<type>배열 | 4 + size(entries) - count(entries) | < short.MaxValue length |
hashtable | 3 + size(keys) + size(values) | < short.MaxValue pairs |
dictionary | 3 + size(keys) + size(values) | < short.MaxValue pairs K- 또는 V-타입이 객체인 경우 추가적인 크기 |
추가 지원
Transform, Image 같은 component는 곧바로 동기화할 수 없고, 그 안에 든 데이터 중 동기화하고 싶은 부분을 수치로 넘겨 동기화해주어야 한다. Vector3를 지원하므로 Transform의 Position, Scale 등을 넘길 수 있겠고 Rotation은 Quaternion을 사용하면 될 것이다.
또한 Photon View는 Player의 Actor Number 값으로 참조 가능하므로 view id(actor number 값)를 보내면 Photon View를 찾아 동기화될 수 있는 것 같다.
타입 (C#) | 크기 [bytes] | 설명 |
Vector2 | 12 | 2 floats |
Vector3 | 16 | 3 floats |
Quaternion | 20 | 4 floats |
PhotonPlayer | 8 | integer PhotonPlayer.ID |
추가로 문서에서 아래와 같이 언급하고 있으므로 Photon Player는 Photon.Realtime.Player로 이해하고, PhotonPlayer.ID는 Player.ActorNumber로 이해하면 되겠다. 아마도 Serialization 문서가 업데이트가 안 되고 방치된 것 같다.
- PhotonPlayer class is now Photon.Realtime.Player (constructor is no longer public)
- PhotonPlayer.ID is now Photon.Realtime.Player.ActorNumber
사용자 정의 방식은 아직까지 해보지 않았다. 위 사이트에 예제 코드가 첨부되어 있으니 그쪽을 참고하길!
하지만 초보 수준에서는 기본으로 지원하는 데이터 타입에 맞춰 핵심적인 변수만 동기화하고, 그 변수를 받아서 함수를 실행시키는 쪽이 빠르고 쾌적한 것 같다.
'Unity 공부' 카테고리의 다른 글
Azure PlayFab 회원가입, 로그인 (0) | 2022.11.18 |
---|---|
[Unity] 어몽어스 미니게임 (멀티) - 스위치 켜기 (Among Us - Light Switch task Multi ver) (0) | 2022.11.13 |
[Unity] 어몽어스 미니게임 - 방패 임무 (Among Us Shield Task) (2) | 2022.11.04 |
[Unity] 베지어 곡선 활용해 오브젝트 곡선 이동 시키기 (0) | 2022.11.03 |
[Unity] Photon, Photon View 이용한 멀티 게임 만들기 (간단 예제) (1) | 2022.10.23 |
댓글