유니티 프로젝트 구성 방법

Yujun Cho·2023년 10월 12일
0

MyDocs

목록 보기
1/1

참고 문서 : https://unity.com/how-to/organizing-your-project

핵심 규칙

  1. 네이밍 컨벤션과 폴더 구조를 문서화하라.
  2. 네이밍 컨벤션에 일관성을 유지하라.
  3. 파일과 폴더 이름에 공백을 사용하지 마라.
  4. 테스트 영역을 분리하라.
  5. 루트 수준에 추가 폴더 생성을 지양하라.
  6. 내부 에셋과 서드파티 에셋을 분리하라.

폴더 구조 예시

  • 1번 예시
    Assets
    +---Art
    | +---Materials
    | +---Models
    | +---Textures
    +---Audio
    | +---Music
    | \---Sound
    +---Code
    | +---Scripts
    | \---Shaders
    +---Docs
    +---Level
    | +---Prefabs
    | +---Scenes
    | \---UI
  • 2번 예시
    Assets
    +---Art
    | +---Materials
    | +---Models
    | +---Music
    | +---Prefabs
    | +---Sound
    | +---Textures
    | +---UI
    +---Levels
    +---Src
    | +---Framework
    | \---Shaders

에셋 유형별로 하위 폴더 나누기

  • Animations
    • 애니메이션 클립과 컨트롤러를 포함한다. 인게임 시네마틱의 타임라인 에셋이나 절차적 애니메이션을 위한 리깅 정보도 포함한다.
  • Audio
    • 오디오 클립뿐만 아니라 효과음과 음악을 섞는 데 사용되는 믹서까지 포함한다.
  • Editor
    • 빌드에 포함되지 않는, 유니티 에디터에서 사용하기 위한 스크립트 툴을 포함한다.
  • Fonts
    • 게임에 사용되는 폰트를 포함한다.
  • Materials
    • Surface Shading에 관한 에셋들이 포함된다.
  • Meshes
    • 외부 디지털 콘텐츠 제작 프로그램에서 제작한 모델을 포함한다.
  • Particles
    • 유니티 파티클 시스템 또는 비주얼 이펙트 그래프로 생성한 파티클 시뮬레이션을 포함한다.
  • Prefabs
    • 재사용 가능한 GameObject를 포함한다.
  • Scripts
    • 게임 플레이를 위해 개발한 모든 코드를 포함한다.
  • Settings
    • HDRP, URP와 같은 렌더 파이프라인 설정을 포함한다.
  • Shaders
    • GPU에서 실행되는 그래픽 파이프라인의 일부인 셰이더를 포함한다.
  • Scenes
    • 프로젝트의 작은 기능적 부분을 저장하는 Scene 에셋을 포함한다.
  • Textures
    • 머리티얼 및 표면 처리를 위한 텍스처 파일, UI 오버레이 요소, 라이팅 정보를 저장하는 라이트맵으로 구성된 이미지 파일을 포함한다.
  • ThirdParty
    • 에셋 스토어와 같은 외부 소스의 에셋이 있는 경우 프로젝트의 나머지 부분과 분리하여 이 폴더에 보관한다.

모든 프로젝트에 같은 폴더 구조 만들기

아래 스크립트를 Editor 폴더 하위에 추가하고 실행하면 된다.

using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
using System.IO;

public class CreateFolders : EditorWindow
{
    private static string projectName = "EditorTest";

    [MenuItem("Assets/Create Default Folders")]
    private static void SetUpFolders()
    {
        CreateFolders window = ScriptableObject.CreateInstance<CreateFolders>();
        window.position = new Rect(Screen.width / 2f, Screen.height / 2f, 400, 150);
        window.ShowPopup();
    }

    private static void CreateAllFolders()
    {
        var folders = new List<string>
        {
            "Animations",
            "Audio",
            "Editor",
            "Materials",
            "Meshes",
            "Prefabs",
            "Scripts",
            "Scenes",
            "Shaders",
            "Textures",
            "UI"
        };

        foreach (string folder in folders)
        {
            if (!Directory.Exists("Assets/" + folder))
            {
                Directory.CreateDirectory("Assets/" + folder);
            }
        }

        var uiFolders = new List<string>
        {
            "Assets",
            "Fonts",
            "Icon"
        };

        foreach (string subfolder in uiFolders)
        {
            if (!Directory.Exists("Assets/UI/" + subfolder))
            {
                Directory.CreateDirectory("Assets/UI/" + subfolder);
            }
        }
        
        AssetDatabase.Refresh();
    }

    void OnGUI()
    {
        EditorGUILayout.LabelField("Insert the Project name used as the root folder");
        projectName = EditorGUILayout.TextField("Project Name: ", projectName);
        this.Repaint();
        GUILayout.Space(70);
        if (GUILayout.Button("Generate!"))
        {
            CreateAllFolders();
            this.Close();
        }
    }
}

.meta 파일과 빈 폴더

Unity는 프로젝트에 있는 모든 폴더에 .meta 파일을 생성한다. meta 파일은 연결된 파일에 대한 많은 중요한 정보를 가지고 있으므로 다른 자동 생성 파일과는 달리 커밋이 필수적이다. 프로젝트에서 Git을 사용할 경우, 빈 폴더는 자동으로 커밋되지 않지만 meta 파일은 커밋된다. 빈 폴더 하위에 .gitkeep 파일을 추가하여 해당 문제를 해결할 수 있다.

표준 네이밍 컨벤션

  1. 역할을 짐작할 수 있도록 자세하고 축약 없는 이름을 사용하라.
    • GOOD : largeButton LargeButton leftButton
    • BAD : lButton
  2. Camel case 또는 Pascal case를 사용하라.
    • GOOD : OutOfMemoryException dateTimeFormat
    • BAD : Outofmemoryexception datetimeformat
  3. 밑줄이나 하이픈 사용을 최소화하라. 다음과 같은 경우에는 유용할 수 있다.
    • 상태 표시 : EnterButton_Active EnterButton_Inactive
    • 텍스쳐 맵 : Foliage_Diffuse Foliage_Normalmap
    • 레벨 : Building_LOD1 Building_LOD0
  4. 순서를 표시해야 할 때 숫자 접미사를 사용하라.
    • 예시 : Node0 Node1 Node2
  5. 기획 문서의 네이밍을 따르라.
profile
Whatever I want.

0개의 댓글