Maemaemae

Unityプロジェクトのセットアップガイド

プロジェクトセットアップは開発の土台となる重要なステップです。適切な初期設定を行うことで、後の開発段階でのトラブルを未然に防ぎ、チーム全体の生産性を向上させることができます。本記事では、Unityプロジェクトを効率的に進めるための環境構築と初期設定について詳しく解説します。

1. プロジェクトセットアップの詳細手順

1.1. Unity環境のセットアップ

Unityバージョンの選定と導入

# Unityバージョン選定のポイント
# - LTSバージョンの使用で安定性を確保
# - プロジェクト全体で統一したバージョン管理が重要

開発の土台となるUnity環境の構築は最も重要なステップです。安定した開発環境を確保するために、以下の手順に従いましょう:

  1. Unity Hubをダウンロードしインストール(まだの場合)
  2. Unity Hubから最新のLTSバージョンをインストール
    • LTS(Long Term Support)バージョンを選ぶことで、長期的な安定性を確保
    • プロジェクト途中での大幅なエンジンアップデートを避けられる
  3. Unity Hubから新規プロジェクト作成を選択
  4. プロジェクトの種類に応じて適切なテンプレートを選択
    • 2D/3Dプロジェクト
    • レンダリングパイプライン(URP/HDRP/Built-in)
  5. プロジェクト名を設定
  6. 保存先ディレクトリを選択し、「作成」をクリック

パッケージの初期導入

プロジェクトの基本機能を拡張するため、必要なパッケージを導入します:

  1. Window > Package Managerを開く
  2. プロジェクトの要件に応じて以下のパッケージを検討:
    • レンダリングパイプライン - URP/HDRPを選択した場合は自動的に導入済み
    • Input System - モダンな入力処理システム
    • Cinemachine - 高度なカメラコントロール用
    • Post Processing - 視覚効果の強化
    • TextMeshPro - 高品質テキスト表示用
    • Animation Rigging - 高度なアニメーション制御
    • Timeline - シネマティックシーケンス用
    • ProBuilder - エディタ内での基本的なモデリングツール
# パッケージ導入後の初期設定
# URPを使用する場合のアセット作成:
# Assets > Create > Rendering > Universal Render Pipeline > Pipeline Asset

プロジェクト設定の最適化

プロジェクトの種類に応じて、以下の各種設定を最適化します:

  1. Physics設定Edit > Project Settings > Physics/Physics2D

    • 重力設定
    • 衝突レイヤー設定
    • Default Solver Iterations調整
  2. Graphics設定Edit > Project Settings > Graphics

    • レンダリングパイプラインの設定
    • カラースペース設定(リニアを推奨)
    • 静的バッチング/動的バッチング設定
  3. Input設定Edit > Project Settings > Input System Package

    • 新Input Systemを使用する場合は有効化
    • 基本的なアクションマップの作成
  4. Quality設定Edit > Project Settings > Quality

    • ターゲットプラットフォームに合わせた品質レベルの設定
    • プラットフォームごとのプリセット調整

1.2. フォルダ構造の確立

フォルダ構造の作成

整理されたフォルダ構造は、大規模プロジェクトの管理に不可欠です。以下の基本構造を作成します:

Assets/
├── _Project/
│   ├── Animations/
│   ├── Art/
│   ├── Audio/
│   ├── Prefabs/
│   ├── Scenes/
│   ├── Scripts/
│   ├── Settings/
│   └── Resources/
├── Plugins/
└── ThirdParty/

サブフォルダの詳細設定

主要フォルダには、さらに詳細なサブフォルダを設定します:

  1. Animations/

    • Characters/
    • Environment/
    • UI/
  2. Art/

    • Materials/
    • Models/
    • Textures/
    • Shaders/
    • Sprites/ (2Dプロジェクトの場合)
  3. Audio/

    • Music/
    • SFX/
    • Ambience/
  4. Prefabs/

    • Characters/
    • Environment/
    • UI/
    • VFX/
  5. Scenes/

    • Levels/
    • UI/
    • Testing/
  6. Scripts/

    • Core/
    • Gameplay/
    • Input/
    • UI/
    • Utils/

READMEの作成

フォルダ構造と規則を明確に説明するREADMEファイルを作成し、Assets/_Projectフォルダ直下に配置します:

# プロジェクト - フォルダ構造ガイド

このドキュメントは、プロジェクトのフォルダ構造と命名規則について説明します。
新しくプロジェクトに参加した開発者は、まずこのガイドを確認してください。

## フォルダ構造の概要
...

1.3. 命名規則の確立

スクリプト命名規則

一貫性のある命名規則を採用することで、コードの可読性と保守性が向上します:

  1. MonoBehaviourクラス: PascalCase.cs

    • 例:PlayerController.cs, EnemyBehavior.cs
  2. インターフェース: IPascalCase.cs

    • 例:IInteractable.cs, IDamageable.cs
  3. ScriptableObject: PascalCaseSO.cs

    • 例:GameConfigSO.cs, CharacterDataSO.cs
  4. 列挙型(Enum): PascalCase.cs内にPascalCaseとして定義

    • 例:ElementType.cs内のElementType列挙型
// スクリプト命名規則の例
public class PlayerController : MonoBehaviour { }
public interface IInteractable { }
[CreateAssetMenu(fileName = "NewGameConfig", menuName = "Game/Config")]
public class GameConfigSO : ScriptableObject { }

シーン命名規則

シーンファイルには、目的を明確にする命名規則を採用します:

  1. シーン: Scene_PascalCase
    • 例:Scene_MainMenu, Scene_Level1, Scene_Tutorial

アセット命名規則

各種アセットは、種類とカテゴリを明示する命名規則を採用します:

  1. テクスチャ: Tex_Category_Name

    • 例:Tex_Character_Diffuse, Tex_UI_Button
  2. マテリアル: Mat_Category_Name

    • 例:Mat_Character_Skin, Mat_Environment_Grass
  3. プレハブ: Prefab_Category_Name

    • 例:Prefab_Character_Player, Prefab_UI_MainMenu
  4. アニメーション: Anim_Object_Action

    • 例:Anim_Character_Run, Anim_Door_Open

レイヤーとタグの設定

プロジェクト全体で使用するレイヤーとタグを事前に設定します:

  1. レイヤーEdit > Project Settings > Tags and Layers

    • Player
    • Enemy
    • Environment
    • Interactable
    • UI
    • PostProcessing
  2. タグ

    • Player
    • Enemy
    • Pickup
    • Checkpoint
    • Obstacle

1.4. バージョン管理システムの設定

Gitリポジトリのセットアップ

効率的なバージョン管理のためにGitを導入します:

  1. Gitリポジトリの初期化

    cd /path/to/your/project
    git init
    
  2. .gitignore ファイルの作成

  3. 初期コミット

    git add .
    git commit -m "Initial project setup"
    

ブランチ戦略の決定

効率的なチーム開発のためのブランチ戦略を確立します:

  1. 主要ブランチ

    • main/master: 安定版のコード
    • develop: 開発中のコード
  2. 機能ブランチ

    • feature/[機能名]: 個別機能の開発
    • release/[バージョン]: リリース準備
    • hotfix/[問題名]: 緊急修正
# 開発ブランチの作成
git checkout -b develop
# 機能ブランチの作成
git checkout -b feature/player-movement

Unity用Git設定の最適化

Unity特有のファイル構造に対応するGit設定を行います:

  1. Unity Smart Merge の設定

    • .gitconfigに以下を追加:
    [merge]
    tool = unityyamlmerge
    [mergetool "unityyamlmerge"]
    trustExitCode = false
    cmd = 'C:/Program Files/Unity/Hub/Editor/20XX.X/Editor/Data/Tools/UnityYAMLMerge.exe' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"
    
  2. LFS (Large File Storage) の設定

    • 大容量アセット用にGit LFSを設定
    git lfs install
    git lfs track "*.psd" "*.tga" "*.tif" "*.cubemap" "*.unitypackage" "*.fbx" "*.mp3" "*.wav" "*.mp4"
    

1.5. テスト環境の構築

テストフレームワークの導入

プロジェクトの信頼性向上のために、テスト環境を準備します:

  1. Unity Test Framework の設定

    • Package Managerから「Test Framework」を追加
    • PlayMode Tests Assembly の作成
    • EditMode Tests Assembly の作成
  2. テストフォルダの設計

    Assets/_Project/Tests/
    ├── EditMode/
    └── PlayMode/
    

デバッグツールの設定

効率的なデバッグを可能にするツールを準備します:

  1. カスタムログシステムの作成

    public static class Logger
    {
        public static void Log(string message, LogType type = LogType.Info)
        {
            switch (type)
            {
                case LogType.Info:
                    Debug.Log($"[INFO] {message}");
                    break;
                case LogType.Warning:
                    Debug.LogWarning($"[WARNING] {message}");
                    break;
                case LogType.Error:
                    Debug.LogError($"[ERROR] {message}");
                    break;
            }
        }
    
        public enum LogType { Info, Warning, Error }
    }
    
  2. デバッグUIの準備

    • 簡易的なデバッグUIパネルのプレハブ作成
    • フレームレートやメモリ使用量などを表示

1.6. 初期アセットの導入

プレースホルダーアセットの作成

迅速なプロトタイピングのために基本的なアセットを準備します:

  1. 基本的なプレースホルダーモデル

    • シンプルなキャラクターモデル(立方体や球体など)
    • 基本的な環境要素(平面、壁、障害物)
  2. テスト用マテリアル

    • 異なる表面特性を持つ基本マテリアル
    • グリッドテクスチャで距離感を掴みやすく

テクスチャとマテリアルのベース設定

インポート設定のベースラインを確立します:

  1. テクスチャインポート設定

    • 適切な圧縮フォーマットのプリセット
    • MipMap設定の最適化
    • ノーマルマップ用設定プリセット
  2. マテリアル設定

    • URP/HDRPシェーダーの基本設定
    • PBRワークフローに基づく標準マテリアル

1.7. 初期設定の確認とテスト

プロジェクト設定の確認

すべての設定が適切に行われているか確認します:

  1. チェックリスト

    • レンダリングパイプラインの設定
    • 入力システムの設定
    • 物理設定
    • 品質設定
    • プラットフォーム設定
  2. パフォーマンスベースラインの測定

    • 空のシーンでのフレームレート測定
    • メモリ使用量のベースライン記録
    • プロファイラーの設定と初期データ取得

フォルダ構造とアクセスのテスト

作成したフォルダ構造が適切に機能するか検証します:

  1. リソースロードテスト

    // Resources フォルダからの読み込みテスト
    var testObject = Resources.Load<GameObject>("TestPrefab");
    Logger.Log(testObject != null ? "Resource loading successful" : "Resource loading failed");
    
  2. アセットバンドルのテスト設定(必要に応じて)

    • アセットバンドルのビルドテスト
    • アセットバンドルからのロードテスト

バージョン管理の確認

Git設定が適切に機能するか確認します:

  1. 基本的なGit操作の確認

    # 小さな変更を加える
    touch test.txt
    # 変更をステージングとコミット
    git add test.txt
    git commit -m "Test commit"
    # リモートリポジトリがある場合はプッシュ
    git push
    
  2. 複数人での同時作業シミュレーション(必要に応じて)

    • 異なるブランチでの同時作業テスト
    • マージの練習とコンフリクト解決

まとめ

適切なプロジェクトセットアップは、Unityでの開発プロセス全体の効率と品質に大きな影響を与えます。この記事で紹介した手順に従うことで、堅固な基盤を構築し、後の開発段階でのトラブルを未然に防ぐことができます。

特にフォルダ構造と命名規則を初期段階でしっかり確立することで、チーム全体の生産性が向上し、長期的なメンテナンスが容易になります。これらのベストプラクティスは、個人開発から大規模チーム開発まで、あらゆるUnityプロジェクトに応用可能です。


この記事は、Unity 2022.3を基準に作成されています。新しいバージョンでは設定方法が異なる場合があります。

Unityプロジェクト管理環境構築開発環境