개요
만약에 서버와 클라이언트 개발을 동시에 하고 있다면, 양쪽에서 동시에 참조하는 코드가 있으면 좋겠다는 생각이 든다.
특히 데이터를 표현하는 클래스가 있는 경우, 서버/클라 양쪽에 별도로 클래스를 선언하는 것은 수정할 때마다 귀찮다.
이 게시물에서는 서버/클라 양쪽에서 참조하는 프로젝트를 만들기 위한 방법을 설명한다.
(최초에는 심볼릭 링크를 사용하는 방법을 찾았었는데, 이쪽이 훨씬 깔끔한 방법으로 보임.)
상세
폴더 배치는 이렇게 했다고 가정한다.
Root
ㄴ Shared
ㄴ Server
ㄴ Unity
Server/Unity 프로젝트에서 동시에 참조하기 위해, Shared 폴더를 외부에 두었다.
클래스 라이브러리를 만들면 아래와 같은 기본 형태를 만날 수 있다.
1. package.json 작성
Unity에서 Custom Package로 가져가기 위해, package.json을 작성한다.
메모장으로 열어서 아래 내용을 입력하고, package.json으로 저장하자.
{
"name": "com.mycompany.shared",
"version": "1.0.0",
"displayName": "Shared Code",
"description": "Shared code library for Unity and Server projects.",
"unity": "2023.2",
"author": {
"name": "Your Name",
"email": "your.email@example.com",
"url": "https://example.com"
}
}
주의할 점은 아래와 같다.
- name: 소문자만 가능하다.
- unity: 유니티 버전은 년도.버전 까지만 입력한다 (ex. 현재 버전이 2023.2.20f1인 경우, 2023.2까지만 입력)
2. Shared.asmdef 작성
Unity에서 어셈블리를 가져갈 수 있도록, asmdef를 작성한다.
메모장을 열어서 아래 내용을 입력하고, Shared.asmdef로 저장하자.
{
"name": "Shared"
}
3. Custom Package 설정
Unity에서 Window -> Package Manager로 들어간다.
들어가서 +를 누르고 install package from disk를 누른다.
Shared 폴더로 들어가면 package.json이 보이는데, 이것을 선택한다.
그러면 패키지 목록에 이렇게 뜬다. 뜨는 이름을 바꾸고 싶다면 package.json의 displayName을 고치면 된다.
3. Unity 솔루션을 열어서 확인하기
유니티 솔루션을 열면, Shared가 솔루션에 포함되어있다.
테스트
서버 솔루션을 아래와 같이 세팅하고, Shared를 수정한 다음 Unity에서 제대로 적용되는지 살펴보자.
아래와 같이 수정하고, 유니티로 넘어가서 Referesh를 해본다.
Refresh 하니 Compling Scripts가 도는 모습.
잘 갱신된 모습이다.
해보니까 문제가 생김
Server에서 빌드를 하면 Shared의 bin, obj 폴더가 생기는데, 여기에 있는 dll도 포함되면서 에러가 생긴다.
이런저런 방법을 찾아봤는데, 이것 외에 Server와 Unity용 Visual Studio를 두 개 열어놓고 사이에 코드가 실시간 갱신되는 방법은 아직 못 찾았고, 그냥 bin과 obj을 별도의 폴더에 만들어주도록 바꾸기로 했다.
Shared.csproj 파일을 열어서 PropertyGroup에 OutputPath와 IntermediateOutputPath를 이렇게 작성해주었다.
<PropertyGroup>
<OutputPath>..\BuildResults\Shared\bin\</OutputPath>
<IntermediateOutputPath>..\BuildResults\Shared\obj\</IntermediateOutputPath>
</PropertyGroup>
이걸로 한동안은 버틸 수 있을 것 같다.
생각해본 다른 방법
FileWatcher를 구현해서 Shared.cs의 내용이 바뀌면 dll을 빌드해서 Unity에 넣어주게 만들고,
유니티 자체 솔루션을 사용하지 않고 Assembly-CSharp와 Shared를 들고 있는 통합 솔루션을 만드는 방향도 있다.
그런데 빌드를 해주는 FileWatcher가 끝나기 전에 Unity로 못 넘어간다는 점 등등 때문에 선택하지 않았다.
'개발' 카테고리의 다른 글
Unity에서 System.Text.Json 사용하기 (0) | 2024.11.24 |
---|---|
위도, 경도를 격자 좌표로 변환하기 (0) | 2024.11.24 |