본문으로 건너뛰기
문서
이 페이지의 내용

설치

SDK 배포 형태는 nuget.org의 BulletHero.SDK 패키지, 또는 소스에서 빌드한 결과물입니다. Unity에서는 git 서브모듈로 연결하며, ConsoleSmoke 샘플로 레벨이 읽히는지 확인합니다

SDK 코드는 github.com/bullet-hero/sdk에 있습니다. 라이선스는 MIT입니다

.NET

BulletHero.SDK 패키지는 nuget.org에 게시되어 있습니다: dotnet add package BulletHero.SDK. 의존성 세 개도 함께 설치됩니다. 소스에서 직접 빌드하려면:

git clone https://github.com/bullet-hero/sdk.git
cd sdk
dotnet build -c Release BH.SDK.csproj   # bin~/Release/BH.SDK.dll and BH.SDK.xml
dotnet pack  -c Release BH.SDK.csproj   # bin~/Release/BulletHero.SDK.<version>.nupkg

그다음 둘 중 하나를 연결합니다:

  • 로컬 폴더의 .nupkg: dotnet add package BulletHero.SDK --source <folder>. 의존성 세 개도 함께 설치됩니다
  • BH.SDK.dll 파일을 직접 연결. 이 경우 아래 세 패키지를 직접 추가합니다: DLL 참조로는 의존성이 따라오지 않습니다

의존성은 모두 NuGet 패키지입니다:

패키지버전용도
Newtonsoft.Json13.0.3JSON
BouncyCastle.Cryptography2.7.0비밀번호로 보호된 레벨용 OpenPGP
SharpZipLib1.4.2tar, zip (gzip 처리는 BCL에서)

빌드 세부 사항

  • 어셈블리 이름은 BH.SDK.dll, XML 문서는 같은 위치에 있습니다
  • 대상은 netstandard2.1, 언어는 C# 9입니다. Unity 프로젝트와 같은 값이므로, 같은 소스가 Unity 안에서도 밖에서도 빌드됩니다
  • 출력 폴더는 bin~, obj~입니다. 물결표가 붙는 이유는 Unity에서 이름이 물결표로 끝나는 폴더를 가져오지 않기 때문입니다

Unity

게임에서는 git 서브모듈로 SDK 저장소를 연결합니다:

git submodule init
git submodule add -f https://github.com/bullet-hero/sdk.git Assets/Plugins/BH.SDK

제거 명령은 git rm -r -f Assets/Plugins/BH.SDK입니다

Unity 프로젝트에서 직접 갖춰야 하는 것:

  • com.unity.nuget.newtonsoft-json 패키지를 통한 Newtonsoft.Json
  • NuGet의 BouncyCastle.Cryptography, SharpZipLib (게임에서는 NuGetForUnity로 설치합니다)
  • Player Settings의 스크립팅 정의 심볼 BHSDK_UNITY. 이 심볼이 없으면 UnityIntegration에서 엔진 없는 분기가 선택됩니다
  • SDK 루트의 BH.SDK.Roslyn.dll. Unity에서 분석기는 그 폴더의 어셈블리와 그 어셈블리를 참조하는 어셈블리에만 적용됩니다. 다른 곳으로 옮기면 아무것도 분석하지 않습니다

저장소 루트에 package.json 파일이 있습니다: 이름은 com.vertoker.bullet-hero-sdk, 최소 Unity 버전은 6000.0. 따라서 Package Manager에서도 git URL 방식으로 SDK 추가가 가능합니다. 이 방법은 사용하지 않으며 여기서 설명하지 않습니다

확인: ConsoleSmoke 샘플

Samples~/ConsoleSmoke - net8.0 콘솔 애플리케이션입니다. 서드파티 도구와 똑같이 빌드된 BH.SDK.dll 파일을 참조합니다. 애플리케이션은 레벨 폴더를 읽고 이름, 오브젝트 수, 세대를 출력합니다. 그다음 레벨을 JSON 형식과 .blob 형식으로 각각 왕복 변환합니다

dotnet build -c Release Samples~/ConsoleSmoke/ConsoleSmoke.csproj
dotnet Samples~/ConsoleSmoke/bin~/Release/net8.0/ConsoleSmoke.dll <level folder>
종료 코드의미
0모두 일치
1잘못된 인수
2level.* 또는 metadata.* 파일이 없음
3왕복 변환 결과가 일치하지 않음
4파일이 이 SDK보다 새로움

게임 내장 레벨 new-zero-demo에서의 출력 (sv 1.0.0 기준으로 기록):

BH.SDK 1.0.0, model generation 1
name:       New zero demo
objects:    782
generation: 1 (Blob)
round trip Json: equal (1505078 bytes)
round trip Blob: equal (680706 bytes)
exit 0

다음 - 레벨 형식

SDK의 구성

부분설명Unity 필요 여부
BH.SDK핵심: 모델, 직렬화, 버전, 규칙, 검증, 아카이브, 게시, 생성기아니요
UnityIntegration모든 파일이 Unity 유무와 관계없이 컴파일되는 얇은 계층(#if BHSDK_UNITY), 예를 들어 Cat 로거아니요: Unity 밖에서는 핵심에 바로 포함되어 컴파일됩니다
UnityExtensionsUnity 타입으로의 변환, 2D 트랜스폼, 아바타 이동예, 항상
BH.SDK.Roslyn분석기와 소스 생성기. [GenerateModel] 특성이 붙은 모든 모델에 대해 Equals, 복사, JSON 및 .blob 코덱, 검증 순회를 작성합니다컴파일 시점에 실행

모델 파일에는 필드와 생성자만 있습니다. 반복되는 코드는 모두 생성기가 작성합니다. 그래서 생성되는 일곱 개의 본문 중 어느 하나에서 필드를 빠뜨리는 일이 생기지 않습니다

별도 라이브러리인 이유

  • 레벨은 게임보다 오래 남습니다. 레벨은 개방형 형식(JSON, tar.gz, zip, OpenPGP)의 파일로 이루어진 폴더입니다. 그 파일을 읽는 코드도 공개되어 있습니다. 레벨을 만든 게임이 사라져도 레벨은 계속 읽을 수 있습니다
  • 다른 리듬 게임과의 연동. 형식이 공개적으로 설명되어 있으므로, 다른 게임과 상호 변환하는 변환기를 이 설명에 맞춰 만들 수 있습니다
  • 빠른 수정. 형식의 결함은 외부에서도 보입니다. 코드를 읽는 사람이라면 누구나 결함을 보고하거나 수정을 보낼 수 있습니다
  • 서드파티 도구. 변환기, 검증기, 레벨 생성기, 모드가 게임과 같은 모델로 작업합니다. 파일에서 모델을 재구성할 필요가 없습니다
  • 서버. 핵심은 Unity 없이 netstandard2.1 대상으로 빌드됩니다. 그래서 서버에서도 클라이언트와 같은 모델에 같은 검사를 실행합니다