![見出し画像](https://assets.st-note.com/production/uploads/images/168795029/rectangle_large_type_2_3c2178e2fc13fb42e135c1e49e79ed23.png?width=1200)
Unityのプロジェクト構成と管理 - Unity開発PMのための知識-
前回の記事ではUnity Editorとプログラムの違いについて主に解説し、開発プロジェクトにおいてどのような役割の人がどのように関わっていくのか、について解説しました。今回はUnityのプロジェクト構成や管理に焦点を当て、必要となる知識についてまとめてみています。
Unityプロジェクト構成の基本
Unityのプロジェクトは独自の構造を持つため、最低限以下の要素を把握しておきましょう。
主なフォルダ構成
Assetsフォルダ: プロジェクトで使用する全てのアセット(スクリプト、画像、モデル、シーンなど)が格納される主要フォルダ。
• Scenesフォルダ: プロジェクトの中でシーンデータを格納する場所。各シーンはアプリの画面やステージに対応。
• Scriptsフォルダ: C#スクリプトが保存される場所。
• Prefabsフォルダ: 再利用可能なオブジェクト(プレハブ)を保存。
• Resourcesフォルダ: 実行時にスクリプトから動的にアクセス可能なアセットを格納。
またこれに合わせて学ぶべきことをまとめてみました。
各フォルダの役割と命名規則を理解する。
プレハブ(Prefab)の役割(再利用可能なオブジェクトのテンプレート)について理解する。
公式ドキュメントhttps://docs.unity3d.com/ja/2018.4/Manual/Prefabs.html
さらにPrefabの使い方についてのさまざまな応用については下記の記事にてまとまっています。
https://note.com/yamasho55/n/nfb2a279ea137
Unityのシーンマネジメント(シーンの切り替え方法や構造設計)。
UnityにおけるGameObjectとPrefab
Unityを使っていく上ではGameObjectとPrefabについての理解が重要になってきます。ここではわかりやすいように、GameObjectとPrefabについて、例を交えながら説明します。
GameObjectとは?
特徴
• GameObject自体は「何もできないただの空っぽの箱」。
• コンポーネントを追加することで、動きや特徴を持たせることができる。
例えるなら…GameObjectはレゴの基礎ブロックのようなものです。ブロック単体ではただの箱ですが、パーツを組み合わせると「車」や「家」になるように、Unityでもコンポーネントを追加することでいろいろな役割を持たせます。
GameObjectにコンポーネントを追加してできること
コンポーネントを追加すると、以下のような動きを持たせられます:
• Transform(必ずついている): オブジェクトの位置、回転、サイズを制御する。
• Renderer: 見た目を表示する(例: キャラクターの3Dモデルやテクスチャ)。
• Collider: 他のオブジェクトとぶつかるようにする。
• Script: プログラムを使って特別な動きをさせる(例: プレイヤーがジャンプする)。
具体例
• キャラクター:
• GameObjectに「3Dモデル」「移動スクリプト」「アニメーション」を追加して、動くキャラクターに。
• ドア:
• GameObjectに「3Dモデル」「開閉スクリプト」「Collider」を追加して、クリックで開くドアに。
Prefabとは?
特徴
• テンプレート: 一度作ったGameObjectを保存しておき、何度でも再利用できる。
• 同期性: Prefabから作ったオブジェクトは、Prefab自体を修正すると自動的にすべて更新される。
例えるなら…Prefabはクッキー型抜きのようなものです。一つの型を使って同じ形のクッキーを何個も作れるように、Prefabを使えば同じ見た目や動きを持つGameObjectを何度でも作れます。
具体例
敵キャラクター:
• 「Enemy」というGameObjectを作り、Prefab化。
• シーンに10体の敵を配置。
• 「Enemy」の見た目やスクリプトをPrefabで修正すると、シーンの10体の敵も自動で修正される。
アイテム:
• コインのPrefabを作成。
• 100枚のコインをシーンに配置しても、1つのPrefabを元にしているので修正が簡単。
GameObjectとPrefabの関係
最初にGameObjectを作る。そのGameObjectをテンプレート化してPrefabにします。その上でPrefabを使ってシーンに同じオブジェクトを何個も配置していく、というのが一般的な流れです。Prefabを効果的に使うことで、大量のオブジェクトの要素を共通化し、メンテナンスがしやすくなります。
アセット管理
Unityプロジェクトではアセットの効率的な管理が重要です。PMとして以下の知識を学び、適切な管理を促すことが求められます。
学ぶべきこと
• アセットの最適化:
• テクスチャや3Dモデルのファイルサイズがパフォーマンスに与える影響。
• 不要なアセットをプロジェクトから削除する重要性。
• 命名規則:
• アセット名やフォルダ名に一貫性を持たせる(例: Player_Main.prefabなど)。
• バージョン管理:
• GitやPlastic SCMを使ってアセットを管理するルールを理解する。
• アセットの競合が起きた際の解決方法。
スクリプト構成
コードを直接書く必要はありませんが、Unityでスクリプトがどのように構成されるか理解することが重要です。
学ぶべきこと
• MonoBehaviourの役割: Unityの基本的なスクリプト構成(Start、Updateメソッドなど)。
• スクリプトの分割: 各スクリプトがどのように責任を分けて機能しているかを把握する。
• 依存関係の管理:
• スクリプト間の依存関係を減らすためにイベントシステムやScriptableObjectが使われる場合がある。
ビルドとプラットフォームの理解
Unityプロジェクトではターゲットプラットフォーム(iOS、Android、PC、WebGLなど)に合わせた設定が重要です。
学ぶべきこと
• ターゲットプラットフォームごとの制約:
• WebGLでは一部の機能が制限されることを理解する。
• モバイルではメモリやグラフィック性能の違いが重要。
• ビルドプロセス:
• ビルド設定(Build Settings)の基本項目を確認(例: 解像度、ターゲットプラットフォーム)。
• エラーログの簡単な読み方。
ツールとプラグインの活用
Unityプロジェクトでは、多くのサードパーティツールやプラグインが利用されます。PMとしては、その役割や利点を理解しておくことが重要です。
学ぶべきこと
• アセットストアの活用:
• 汎用的なツール(例: ProBuilder、Post Processing Stack)。
• 最適化用ツール(例: Profiler、Memory Profiler)。
• デバッグツール:
• Unityのコンソールでエラーメッセージを確認する方法。
• チームにProfilerを活用させる環境の整備。
プロジェクトのパフォーマンス最適化
Unityではパフォーマンスがプロジェクトの成否を分ける重要な要素です。PMとして以下の知識を持ち、必要に応じてエンジニアに最適化を依頼できるようにします。
学ぶべきこと
• フレームレート(FPS): ユーザー体験に直結するパフォーマンス指標。
• ドローコール: 同時に描画されるオブジェクト数がパフォーマンスに与える影響。
• ライトの最適化:
• リアルタイムライトとベイクドライトの違い。
• ライティングがパフォーマンスに及ぼす影響。
• ビルドサイズの管理: 使用していないアセットが含まれないようにする。
チーム間でのコーディングと作業ルール
PMとして、エンジニアやデザイナーが効率的に作業できる環境を整える役割があります。
推奨ルール
• コーディング規約の策定: コードのスタイルや命名規則を統一する。
• プレハブ管理ルール: 誰がどのプレハブを編集できるかを明確化。
• バージョン管理のフロー: Gitフローやブランチ戦略(例: 開発ブランチ、リリースブランチ)。
学ぶべき基本事項
• システムの構成: フロントエンド、バックエンド、データベースの役割と連携。
• 開発ツールとプロセス: Git、CI/CD、チケット管理ツール(JIRA、Trelloなど)の基本的な使い方。
• プログラミングの基本概念: 変数、条件分岐、ループ、オブジェクト指向の概要。
• プロジェクトで使用する技術の理解: UnityやAWSなど、チームが使用しているツールやプラットフォームの概要。
今後の記事でも上記の内容について、深掘りしていきます。