[유니티] MacOS(M1), 유니티에 Protobuf 적용하기
Node.js + Unity 강의 제작 중 프로토콜 버퍼 적용하는 과정이 꽤나 까다로웠기때문에 공유.
이 가이드를 따라오기 위한 전제조건
- MacOS
- 유니티 설치가 완료된 상태 (.Net Framwork or .Netstandard 2.x or 4 or 6 or 8...)
윈도우는 오히려 설치가 더 쉽기때문에 그냥 패키지매니저를 통해서 다운로드 받아 사용하면 된다.
처음에는 다른 플러그인들을 사용해보다가 결국에는 protobuf-net을 사용하기로 했다.
사용한 플러그인은 protobuf-net
아래와 같이 주고받을 패킷 구조 정의가 가능하다.
서버에서도 물론 protobufjs 를 사용해서 같은 형태로 보내주고 있다.
[ProtoContract]
public class CommonPacket
{
[ProtoMember(1)]
public uint handlerId { get; set; }
[ProtoMember(2)]
public uint playerId { get; set; }
[ProtoMember(3)]
public string version { get; set; }
[ProtoMember(4)]
public byte[] payload { get; set; }
}
무언가를 다운로드하기 전에 확인해야 할 사항
유니티 상단 메뉴에서
Edit >> Project Settings... >> Player >> Other Settings
많이 나오는 세팅 값들 중에 아래와 같은 값을 찾아야한다.
지금 내 유니티는 .NET Standard 2.1 로 돌아가고 있구나를 파악한다.
자 그리고
https://www.nuget.org/packages/protobuf-net
nuget 패키지 매니저에서 플러그인을 직접 다운로드 받아서 사용하면 되는데 체크해야할 것은 2곳
오른쪽 빨간박스에서 직접 다운로드 받으면 되고
그 다음에는 왼쪽에 있는 의존성 패키지로 들어가 또 다운로드 받으면 된다.
만약 또 의존성이 있다면 모조리 다운로드해야한다. (어차피 하나라도 없으면 실행안됨)
.NetStandard 2.1 에서 필요한건 아래 2개까지 해서 총 3개
https://www.nuget.org/packages/protobuf-net.Core/
https://www.nuget.org/packages/System.Collections.Immutable/
그런데 다운로드 받으면 '.nuget' 이라는 확장자로 지정되어있는데 신경쓰지말고 '.zip'으로 변경해서 압축해제해주자
그리고 폴더 안을 보면 아래와 같이 구성되어 있을텐데
lib >>> [본인의 dotnet 설정에 따라 선택 (지금은 .NetStandard 2.1)] >>> [플러그인 이름 ].dll
dll 확장자 파일을 찾아서 유니티에 붙여넣어주면 된다.
붙여넣는 경로는
Assets >>> Plugins 폴더 안으로!
셋팅을 다 했다면 이제 마지막으로 명령어를 날려주자
프로젝트 폴더에서 터미널을 활성화 시키고
dotnet add package protobuf-net --version 3.2.30
dotnet add package protobuf-net.Core --version 3.2.30
dotnet add package System.Collections.Immutable --version 8.0.0
위 과정이 정상적으로 마무리되었다면 프로토버프 사용은 using Protobuf; 로 네임스페이스 선언해주고 쓰면된다.
TCP 패킷통신에서 프로토콜 버퍼 굉장히 많이 쓰는데 Mac 에서 개발하는 사람이 적다보니까 자료가 적어 내가 남겨둔다.