YAML 클래스 ID 레퍼런스
스크립팅을 통한 소스 에셋 수정

캐시 서버 (Team License)

Unity는 완전히 자동인 에셋 파이프 라인을 가지고 있습니다. 에셋의 근원이 되는 psd 파일과 fbx 파일이 변경되면 Unity는 자동으로 다시 임포트합니다. 파일에서 임포트된 데이터는 즉시 내부 형식으로 변환되어 저장됩니다.

이 에셋 파이프 라인의 좋은 점은 순차적으로 다시 로드하는 점과 눈에 보이는 에셋 게임 내의 동기화가 보장되는 것입니다. 단지 다른 한편으로 이 기능은 얼마 가지 비용이 듭니다. 어떤 에셋이라도 수정되면 즉시 반드시 다시 임포트됩니다. 긴 간격이 벌어져서 SCM에서 최신 데이터를 검색한 후가 되면 다른 팀원 수정 또는 생성한 모든 에셋을 다시 임포트하기 위해 장시간 기다려야 합니다. 또한 다른 플랫폼으로 이동할 때마다 많은 에셋을 다시 임포트하게 됩니다.

이 에셋을 임포트하는 시간을 Cache Server에서 임포트된 에셋 데이터를 캐시함으로써 급격하게 단축할 수 있습니다.

각각의 에셋 임포트는 다음에 따라 캐시됩니다.

  • 에셋 파일 자체
  • 임포트 설정
  • 에셋 임포터 버전
  • 현재의 플랫폼

이상의 어느 하나가 변경되면 에셋은 다시 임포트되거나 캐시 서버에서 다운로드됩니다.

Preference에서 캐시 서버를 활성화 하면, 여러 프로젝트 (즉, 임포트 작업을 하나의 시스템에서 수행하고 그 결과를 다른 사람들과 공유하는)에서 애셋 임포트를 공유 할 수 있습니다.

일단 Cache Server를 구성하면 추가적 작업 없이, 이 과정은 모두 완전히 자동화 됩니다. 임포트를 하기 위한 시간을 간단히 단축해주는 것입니다.

Cache Server 설정 (user)

캐시 서버를 설정하는 방법은 굉장히 간단합니다. 할 일은 Preferences의 “Use Cache Server”를 선택하는 것으로, 로컬 머신의 Unity Editor에 어디에 Cache Server가 있는지 알려주는 것입니다.

이 항목은 Mac에서는 Unity->Preferences, PC에서는 Edit->Preferences에 있습니다.

만약 로컬 컴퓨터에 캐시 서버가 호스팅되어 있다면, 서버 주소는 _localhost_로 해주세요. 단, 로컬 PC에서 하드 디스크 크기 제한이 있기 때문에 캐시 서버는 다른 컴퓨터에 설치하는 것이 좋습니다.

Cache Server 설정 (user)

관리자는 캐시된 에셋을 호스팅 하기 위한 Cache Server 시스템 설정해야 합니다.

다음과 같이 해주세요 :

  • 온라인 상점에서 캐시 서버(Unity Pro 기능)를 구입하세요.
  • Collaboration에서 다운로드하십시오.
  • 파일 압축을 풀면 다음과 같이 됩니다 :
  • OS마다 다르지만, 적절한 명령 스크립트를 실행시켜주세요.
  • 아래와 같이 백그라운드에서 실행되고있는 캐시 서버를 터미널 창에서 확인할 수 있습니다

Cache Server는 매우 큰 스토리지를 가진 신뢰할 수 있는 시스템이 필요합니다 (여러 버전에서 임포트된 리소스를 저장해두기 위해 프로젝트 자체의 크기보다 클 것입니다). 만약 하드디스크가 Cache Server로 가득 찬 경우 성능이 떨어질지도 모릅니다.

서비스로 캐시 서버를 설치

제공된 ‘.sh’ 와 ‘.cmd’ 스크립트 파일이 서버에 서비스로 설치 되어야 합니다. 그렇게 함으로써 언제든지 캐시 서버는 안전하게 중단하고 다시 시작할 수 있습니다.

캐시 서버 구성

스크립트를 더블클릭하여 간단하게 Cache Server를 시작하면, 8125포트에서 레거시 캐시 서버를, 8126포트에서 새 캐시서버를 런칭합니다. 또한 “cache”와 “cache5.0”디렉토리를 생성하고 거기에 데이터가 저장됩니다. 캐시 디렉토리는 기본적으로 50GB까지 커질 수 있도록 되어 있습니다. 이 크기 설정이나 데이터의 위치는 아래의 커맨드라인 옵션에서 변경할 수 있습니다:

./RunOSX.command --path ~/mycachePath --size 2000000000

or

./RunOSX.command --path ~/mycachePath --port 8199 -nolegacy

You can configure the cache server by using the following command line options:

--port lets you specify the server port, it only applies to the new cache server, the default value is 8126.

--path lets you specify the path of the cache location, it only applies to the new cache server, the default value is ./cache5.0.

--legacypath lets you specify the path of the cache location, it only applies to the legacy cache server, the default value is ./cache.

--size lets you specify the maximum cache size in bytes for both cache servers. Files that have not been used recently will automatically be discarded when the cache size is exceeded.

--nolegacy if specify it will NOT start the legacy cache server, otherwise the legacy cache server is started on port 8125.

캐시 서버에서 호스팅하는 시스템의 요구 사양

최상의 성능을 얻기 위해 임포트된 프로젝트 전체가 망라할 수있는 충분한 메모리 공간이 필요합니다. 또한 빠른 하드디스크와 고속 이더넷 연결이 있는 것이 가장 좋습니다. 하드디스크는 충분히 여유 공간이 있는 것이 더 좋습니다. 한편, 캐시 서버는 CPU 파워는 거의 필요하지 않습니다.

Cache Server 와 버전 컨트롤의 주요 차이점은 캐시화된 데이터는 항상 로컬로 재구성된 것이라는 점입니다. 이것은 간단하게 성능 개선을 위한 도구 입니다. 이러한 이유로 캐시 서버는 인터넷 넘어로의 이용은 좋은 방법이 아닙니다. 분산되어 있는 팀이라면 각 지점에서 캐시 서버를 세워야 합니다.

Linux 또는 Mac OS X 컴퓨터에서 캐시 서버를 실행해야 합니다. 캐시 서버가 데이터를 저장할 때 파일 잠금이 발생하는 문제가 있고 Windows 파일 시스템은 최적화에 그다지 좋지 않습니다. Linux 및 Mac OS X에서는 그런 것이 없습니다.

캐시 서버 FAQ

캐시 서버의 DB 크기는 임포트하거나 리소스를 저장할 때마다 무한히 커집니까?

캐시 서버는 자동으로 일정기간 사용되지 않는 에셋을 제거합니다 (물론 다시 필요해지면, 다음에 사용할 때 다시 만들어 질 것입니다).

캐시 서버는 Asset Server에서만 작동하나요?

캐시 서버는 소스 ​​버전 컨트롤과 분리하여 디자인되어 있기 때문에, Unity의 Asset Server에 제한되는 것은 아닙니다.

무엇을 변경하면 재생성하기 위한 파일이 임포트됩니까?

Unity는 하나의 에셋을 임포트하려고 할 때 바탕이 되는 모든 데이터의 MD5 해시를 생성합니다.

예를 들어 텍스처는 다음과 같이 구성되어 있습니다 :

  • Source 에셋 : “myTexture.psd”파일
  • 메타 파일 : “myTexture.psd.meta”(모든 임포트 설정을 저장합니다)
  • 텍스처 임포터의 내부 버전 번호
  • 모든 AssetPostprocessors 버전 번호의 해시

만약 Cache Server에 저장되어있는 해시가 다르다면, 에셋은 다시 임포트되거나 캐시화된 버전이 다운로드됩니다. 클라이언트 측 Unity editor는 필요할 때 서버에서 에셋을 가져 오는 것 뿐입니다. 즉 에셋이 각각의 프로젝트에 푸시되는 것은 아닙니다.

종속성이 있는 에셋은 어떻게 다루면 됩니까?

캐시 서버는 종속성에 관여하지 않습니다. Unity 에셋 파이프 라인은 종속성 개념을 다루지 않습니다. 종속성이 있는 에셋은 피해서 만들어주세요. AssetPostprocessors은 에셋 임포트를 자신에 맞게 커스터마이징하는 공통적인 기법입니다. 예를 들어, fbx 파일의 정해진 이름과 태그에서 GameObject에 MeshCollider를 추가할 수 있습니다.

AssetPostprocessors를 사용하여 종속성을 명시적으로 쉽게 선보일수 있습니다. 예를 들어 텍스트 텍스트 파일에서 임포트된 게임 객체에 컴포넌트를 추가하는 데이터를 사용합니다. 이것은 Cache Server에서 지원되지 않습니다. 만약 캐시 서버를 사용하고 싶다면 프로젝트 폴더의 ​​다른 에셋에 대한 종속성을 제거해야 합니다. 캐시 서버가 Postprocessor의 종속성에 대해 아무것도 모르기 때문에 이전 버전의 에셋이 변경 되었는지 알수 없습니다..

실제로, 캐시 서버에서 동작하게 하기 위한 에셋 PostProcessor를 실행할 수 있는 방법은 많이 있습니다. 예를 들면:

임포트된 에셋의 경로 에셋의 모든 임포트 설정 *근원이 되는 에셋 자신 또는 에셋 포스트 프로세서에서 생성된 데이터

메테리얼을 변경할 때 문제가 있습니까?

메테리얼(Meterial) 변경에는 알려진 문제가 있습니다. 캐시 서버를 사용하고 있으면, Unity는 메테리얼 참조가 유효한지 확인합니다. 그러나 PostProcess가 호출되지 않기 때문에, 캐시 서버를 통해 임포트된 모델에서는 메테리얼의 내용이 변경될 수는 없습니다. 따라서 캐시 서버가 있는 경우와 없는 경우가 서로 다른 결과를 얻게 될 것입니다. 이것을 방지하려면 디스크에 이미 존재하는 메테리얼은 수정하지 않는 것입니다.

서버에서 캐시되지 않는 에셋의 종류가 있습니까?

서버에 캐시되지 않는 일부 에셋의 종류가 있습니다. 캐싱 스크립트에 의해 만들어진 것은 서버에서 무시되므로 캐시되지 않습니다. (Maya, 3D Max 등) 3D 모델링 소프트웨어에서 사용되는 기본 파일은 해당 응용 프로그램을 사용하여 FBX로 변환됩니다. 현재 서버에서는 기본 파일과 임포트 프로세스에서 생성된 FBX 파일 전부를 캐시화하지 않습니다. 하지만 모델링 소프트웨어에서 FBX로 익스포트된 파일을 Unity 프로젝트에 추가함으로서 캐시화 할 수 있습니다.

YAML 클래스 ID 레퍼런스
스크립팅을 통한 소스 에셋 수정