버그 해결을 위한 모든 질문을 던져
0 votes
157 views
안녕하세요. 저는 생산성 측면에서 좀 더 나은 방법이 있을지 고민하고 있는데요,

유니티로 게임클라이언트와 데디서버를 모두 제작하며 공부하고있습니다. 이 경우 패킷을 생성할 때 공용으로 사용되는 어셈블리에 패킷을 만들어두고 활용하니 문제가 없는데, 따로 솔루션을 파서 매치메이킹 서버를 제작했습니다. 언어는 공통으로 C#으로 만들었고, 웹소켓으로 데이터를 주고받습니다.

이 때, 유니티 클라이언트와 매치메이킹 서버가 주고받는 패킷 구조를 공유하기 위해서 저는 2가지 방법을 사용해보았는데요. 하나는 프로토콜용 클래스들을 유니티 밖 프로젝트에서 클래스 라이브러리로 생성해 컴파일시 유니티 프로젝트로 dll로서 임포트하고 매치메이킹 서버에서는 레퍼런스로 dll 을 지정하여 공유하는 방식입니다. 이 경우 프로토콜을 편집하는 과정이 번거로워 후순위로 미뤄두기로 했습니다.

두번째 방식인 현재 시도해보고 있는 작업은 유니티 프로젝트 내부에 프로토콜 클래스를 생성해 사용하고, 컴파일이 될 때마다 매치메이킹 프로젝트 파일(csproj)에 xml 형태로 파일 레퍼런스를 직접 끼워넣는 것입니다. 이 경우 양쪽 IDE에서 쉽게 편집이 가능은 하지만 리팩터링등에는 취약하다는 점이 있어 그다지 바람직한 방법은 아니라고 느끼고 있습니다.

 

이외에 공유되는 코드 뭉치를 어떤 식으로 관리해야할지 일반적으로 사용되는 방법이 있는지 궁금합니다.
asked (51 point) , 157 views
유니티 개발을 해본적이 없어서 잘 모르는 상황인데 프로토콜용 프로젝트를 양쪽 솔루션에 추가하는 것이 불가능한가요?

1 답변

+2 votes
유니티 빌드 이후 xml파일을 추가및 삭제 해주는 툴을 만들어서 돌리게 하시면 원하는 그림이 나오지 않을까 싶습니다
answered (160 point)
답변 감사드립니다!

음... 현재 두번째 방법으로 말씀드렸던 XMLDocument를 이용해서 [RuntimeInitializeOnLoad] 콜백에서 작업을 처리해주고 있는데요, 제가 얼핏 이해하기로는 비슷한 사이클인 듯 한데 혹여 말씀해주신 방식과 차이가 있을까요?

네 하나더 생각낫는데 될진 모르겟지만 https://docs.unity3d.com/Manual/ScriptCompilationAssemblyDefinitionFiles.html 패킷을 따로 어셈블 디피니션으로 넣을경우 솔루션에 프로젝트가 하나 더 생길거고 해당 프로젝트를 서버 솔루션에 추가 하면 되지 않나 싶어요

추가 답변감사드립니다.

시도해보았던 방법이긴 한데 저는 Library/ScriptAssemblies에 생성되는 임시 dll 들을 서버프로젝트에서 레페런스추가해 활용했었습니다. 이 방법은 아쉽게도 2가지 문제가 있었는데요, 첫째로는 서버프로젝트에서는 패킷구조를 수정할 수 없었고 변경된 DLL을 얻기 위해서는 유니티에디터의 도메인 언로드와 컴파일 시간을 기다려야 했고, 두번째로는 릴리즈용으로 컴파일된 클래스라이브러리가 아니어서 빌드 후 DLL과 추가로 연결해야줘야 하더라고요. (이건 유니티 빌드 콜백에서 어거지로 자동화하긴 했습니다.)

기억을 더듬어보니 패킷용 클래스라이브러리를 유니티에 임포트하고도 IDE에서 클래스 정의를 살펴볼 때 pdb나 xml파일이 있으면 원본 파일로 이동해서 수정이 가능했던 것 같은데, 지금은 Rider를 사용해서 그런지 디컴파일을 해버리네요. 아무래도 프로젝트를 직접 연결하는 이 쪽 방향으로 해결을 보는게 맞지 않을까 싶은데 쉽지가 않군요 ㅠㅠ
dll을 활용 하는게 아니라 서버 솔루션에 해당 패킷 프로젝트를 추가 하는거긴 한데 그게 그게 그거 겟져?
아하, 유니티 프로젝트 루트에 생성되는 프로젝트를 추가하는 거군요. 이건 생각 못해봤지만 좋은 실마리가 될 수 있을 것 같습니다. 감사합니다!

버그 해결을 위해 도움을 구하고, 도움을 주세요. 우리는 그렇게 발전합니다.

throw bug 는 프로그래밍에 대한 전분야를 다룹니다. 질문,논의거리,팁,정보공유 모든 것이 가능합니다. 프로그래밍과 관련이 없는 내용은 환영받지 못합니다.

520 질문
675 answers
665 댓글
118,175 users