Struct와 Class

struct는 value type, class는 reference type이다.
struct의 경우 NetworkVariable로 설정할 수 있다. NetworkVariable은 Mirror의 SyncVar 개념과 같다고 보면 된다.
NetworkVariable은 value type만 자료형으로 받을 수 있다. 따라서 class는 들어갈 수 없다.
struct의 경우, NetworkSerialize 함수를 선언해 주면 NetworkVariable로 사용할 수 있다. (위 그림 참고)
NetworkVariable에 관해
Mirror와 마찬가지로 NetworkVariable은 호스트(서버)만 변경할 수 있다.
이를 바꾸기 위해서는 선언 시 파라미터를 IsOwner도 바꿀 수 있게 설정해주면 된다.
NetworkVariable<int> randomNumber = new NetworkVariable<int>
(1,NetworkVariableReadPermission.Everyone, NetworkVariableWritePermission.Owner);
이런 식으로 말이다.
NetworkVariable값이 바뀌면 OnValueChanged 이벤트를 통해서 모든 Client에 바뀐 값이 전달된다.
String 역직렬화 문제
클라이언트 -> 서버로 데이터를 넘길때 데이터를 '직렬화' 하는 과정이 필요하다.
직렬화는 복잡한 데이터 구조를 변환하는 것을 뜻한다.
서버에서 클라이언트로 데이터를 보낼때는, 반대로 '역직렬화' 해야한다.
string은 reference type이기 때문에 역직렬화시 문제가 생긴다.
Collections.FixedString을 이용하면 이 문제를 해결할 수 있다.
'Unity' 카테고리의 다른 글
| [Unity] DOTS 실전 개념 정리 - Tag, EnableableComponent, CompanionLink 이해하기 (0) | 2025.04.23 |
|---|---|
| [Unity] DOTS 성능 최적화 단계별 비교 (0) | 2025.04.13 |
| [Unity] DOTS 이해하기 (0) | 2025.04.08 |
| [Unity] UniTask가 뭘까? (0) | 2025.03.20 |
| Unity 게임에서 스크린샷 QR코드를 생성해 보자 (Firebase 이용) (0) | 2024.11.20 |