Share

Unity folder structure guide 2021

  • 2021년 03월 02일

Unity folder structure guide 2021

Assets 폴더는 시스템 폴더로 간주한다. 마치 nodejs node_modules 폴더처럼 하위의 바로 유니티 에셋들이 바로 설치되기 때문에 이곳을 내 프로젝트의 루트폴더로 사용하면 모듈별로 폴더 관리가 되지 않는다. 유니티도 Package manager로 모듈화가 이제 가능하지만 모든 에셋들이 이런 방식으로 패키징이 되는 것은 아니다.

유니티는 기본적으로 카멜케이스 방식의 자유롭게 에셋 이름을 짖는 문화이다. 하지만 내가 만드는 프로젝트의 최상의 모듈 폴더는 git 리포지터의 프로젝트명과 동일한 하이픈과 소문자 기반으로 이름을 만들도록 한다. 단 하부 폴더의 경우에는 유니티 문화를 따라서 만들어도 된다.

  • {PREFIX}-{PACKAGE_NAME}
    • libunity-unittest
    • frwunity-match3-kit

그외 스크립트는 클래스는 카멜케이스 함수는 소문자 언더스코어로 파이 이름을 네이밍 한다. 리소스(이미지, 프리팹)는 소문자와 언더스코어를 사용한다. 씬파일은 자유롭게 네이밍

Project structure

리포지터리 하부의 폴더는 소문자와 언더스코어를 사용한다. 유니티에서 Assets 하위에 바로만든 Resources는 전제 공용으로 사용하는 것이고 1min-cak같은 모듈폴더 아래에 위치한 Resources는 해당 모듈을 위한 것이다. 이때 Resources, StreammingAssets 폴더는 다른 폴더에 만들더라도 하나로 합쳐져서 빌드가 되므로 하위에 모듈명을 만들어서 관리한다.

하나의 모듈은 Runtime,Editor,Test 폴더로 소스를 분리해서 관리하고 각각 Assembly Definition Asset을 정의한다. Editor소스를 분리해야 빌드시에 Editor를 빌드에 포함시키지 않게 구성이 쉬워진다.

  • 1min-cak-client
    • Documentation
    • Conf
    • Refs : 참고 프로젝트
      • MVVM
        • Assets
      • Assets
        • CAK : 콘텐츠 모듈. 루트 네임스페이스명으로 네이밍
          • Runtime: 콘텐츠 리소스
            • Scripts
            • Scenes
            • Sprites
          • Editor : 에디터 리소스
            • Scripts
            • Scenes
          • Tests : 테스트 리소스
            • Runtime
            • Editor
          • Examples
            • Runtime
            • Editor
          • Assets: 해당 모듈과 밀접한 관계를 가진 일부 라이프러리 패키지만 이곳에서 묶어서 처리. Assets 폴더 자체의 의미가 node_modules 같은 의미이기 때문에 외부 패키지의 경우는 루트 폴더에 두는게 더 어울린다.
            • iTween
            • MiniJson
          • Documentation
          • Resources : 1min-cak 공용 리소스 폴더
            • CAK
            • CAK.Examples
          • Mirror
          • Other assets #1
          • Other assets #2
          • specail folder #1 : Assets 폴더 루트에 자동으로 생성되는 파일들도 존재한다.
          • Resources: 모든 모듈 공용 리소스 폴더
            • CAK
              • png
            • Mirror
              • something resources …
            • Editor : 모든 공용 Editor 모듈 폴더
          • Library
          • Packages
  • 1min-cak-client-examples
    • simulator-test(src) : 예제 유니티 프로젝트 폴더
      • Assets
        • CAK.SimulatorTest
    • 1min-cak-functions
      • src
    • 1min-cak-apis-{SERVICE}
      • src or {SERVICE}

 

Assets 폴더 하위에 들어가는 각 모듈의 폴더 구조는 다음과 같다.

  • CAK
    • Runtime
      • Scripts : CAK를 루트 네임스페이스로 사용하고 하위에 폴더명에 맞춰 네임스페이스를 네이밍
        • cs : class OneMinute.CAK.Core
          • UI
            • cs : class OneMinute.CAK.Core.UI.MessageBox
          • Editor
        • Scenes
        • Presets
        • AnimationControllers
        • Materials
      • Editor : Runtime과 동일. 배포 빌드에 제외되는 소스들과 리소스를 배치한다.
        • Scripts
          • cs : class OneMinute.CAK.Editor(Edits?).AAEditor
        • Scenes
      • Tests
        • Runtime
          • Scripts
            • cs : class OneMinute.CAK.Tests.Foo.
          • Editor
        • Examples
          • Runtime
            • Scripts
              • Samples1
                • cs : class OneMinute.CAK.Examples.Samples1.Entry
              • Scenes
            • Documentation
            • Resources

Package Structure

유니티 패키지 가이드라인을 따른다. conf, doc, src 등의 폴더까지 하나의 유니티 패키지로 포함되는 구조이다.

https://docs.unity3d.com/kr/current/Manual/cus-layout.html

  • libunity-unittest (폴더명은 libunity-unittest이지만json에서 Display name LibUnity.UnitTest와 같은 네임스페이스 형태로 설정)
    • json
    • md
    • Runtime
      • [YourPackageName].asmdef : LibUnity.UnitTest.asmdef
      • Scripts
        • cs : class LibUnity.UnitTest.Bar
      • Scenes
    • Editor
      • [YourPackageName].Editor.asmdef : LibUnity.UnitTest.Editor.asmdef, Platforms 옵션을 Editor로 선택해서 빌드시에 포함되지 않도록 설정해야 한다.
      • Scripts
      • Scenes
    • Tests
      • Runtime
        • [YourPackageName].Tests.asmdef :LibUnity.UnitTest.Tests.asmdef
        • Scripts
        • Scenes
      • Editor
    • Documentation
      • [YourPackageName].md : libunity-unittest.md
    • Samples~
      • 임포트시에 보이지 않는 폴더. 유니티 패키지 자체는 읽기 전용이므로 씬파일등을 넣어서 실행할 수 없다. 따라서 해당 폴더에 예제나 샘플 패키지를 넣어서 배포한다.
0
Would love your thoughts, please comment.x
()
x