【Unity 6】2人チーム開発の実務フロー|担当別テストシーン・Prefab・PR・シーン統合
Gitチーム開発シリーズ・Unity 6 実務フロー編:2人で作る6ステップの実習記事を終えた人向けです。画像とサンプルのPlayer・Coin・CoinCounterを引き継ぎ、日々のチーム開発で続けやすい作業の分け方に進みます。
今回も2人でコイン収集ゲームを作ります。AさんがPlayer、BさんがCoinとスコアを担当します。動作確認には担当別のテストシーンを使い、共有するMainScene.unityは統合担当がレビュー付きのPRで更新します。完成条件は、全員が最新のmainを取得し、3個のCoinを集めるとCLEAR!が表示されることです。

この進め方で残す成果物
| 担当 | 作るもの | 動作確認に使うもの | PRで確認すること |
|---|---|---|---|
| Aさん | PlayerMovement.cs、Player.prefab | Assets/DevScenes/PlayerCheck.unity | Playerの移動、対応する.meta、共有シーンを変更していないこと |
| Bさん | Coin.cs、CoinCounter.cs、2つのPrefab | Assets/DevScenes/CoinCheck.unity | 接触・カウント、対応する.meta、共有シーンを変更していないこと |
| 統合担当(この例ではAさん) | MainScene.unity | 統合後のMainScene.unity | Player・Coin・スコアを組み合わせた結果と、ほかのメンバーによるレビュー |
担当別テストシーンは、作り直す手間を減らし、PRのレビュー担当も同じ状態を再現できるようにするため、各担当の成果物としてCommitします。PlayerCheck.unityとCoinCheck.unityは別ファイルにし、同じテストシーンを2人で同時編集しません。これらのシーンはこの例の命名です。
STEP 1:共通の土台をそろえる
- 2人とも同じUnity 6のEditorバージョンでプロジェクトを開きます。Input Systemを使用するため、Package Managerの導入状況とActive Input Handlingを確認します。
- Aさんは
MainScene.unityを保存し、GitHub Desktopでプロジェクトのルートをリポジトリにします。Git IgnoreはUnityを選び、Assets、Packages、ProjectSettingsと必要な.metaを共有します。LibraryやTempはCommitしません。 - BさんはClone先をUnity Hubに既存プロジェクトとして追加し、同じEditorで開きます。別の新規プロジェクトをClone先の中に作りません。
- 2人で
mainのMainScene.unityが開くこと、Consoleに作業を妨げるエラーがないことを確認します。
フォルダーやアセットの.metaは対応するファイルと一緒にCommitします。空フォルダーをGitで維持したい場合の.gitkeepは、実習記事で説明したとおり任意です。
STEP 2:担当ブランチとテストシーンを分ける
Aさんは最新のmainからfeature/player-movement、Bさんはfeature/coin-collectionを作ります。それぞれのブランチでAssets/DevScenesに担当専用のテストシーンを作ります。共有シーンを一時的な実験場所にせず、Prefabとスクリプトの動作を自分のテストシーンで確認します。

図のMainScene.unityは統合段階でAさんが編集する共有シーンです。担当ブランチのPRには各担当のテストシーンを含めても、MainScene.unityの変更は含めません。テストシーンを共有しない運用も可能ですが、この例では再現性を優先してPRに含めます。
STEP 3:AさんがPlayerを作り、専用シーンで確認する
PlayerMovement.csを作り、Rigidbody 2DとCollider 2Dを付けたPlayerをAssets/Prefabs/Player.prefabに保存します。Prefabの設定を変えるときはPrefab Modeでアセットを開き、シーン上のインスタンスだけに残ったOverrideと混同しないようにします。
using UnityEngine;
using UnityEngine.InputSystem;
[RequireComponent(typeof(Rigidbody2D))]
public class PlayerMovement : MonoBehaviour
{
[SerializeField] private float moveSpeed = 4f;
private Rigidbody2D rb;
private Vector2 moveInput;
private void Awake()
{
rb = GetComponent<Rigidbody2D>();
}
private void Update()
{
Keyboard keyboard = Keyboard.current;
if (keyboard == null)
{
moveInput = Vector2.zero;
return;
}
float x = 0f;
float y = 0f;
if (keyboard.aKey.isPressed || keyboard.leftArrowKey.isPressed) x -= 1f;
if (keyboard.dKey.isPressed || keyboard.rightArrowKey.isPressed) x += 1f;
if (keyboard.sKey.isPressed || keyboard.downArrowKey.isPressed) y -= 1f;
if (keyboard.wKey.isPressed || keyboard.upArrowKey.isPressed) y += 1f;
moveInput = new Vector2(x, y).normalized;
}
private void FixedUpdate()
{
rb.linearVelocity = moveInput * moveSpeed;
}
}
PlayerCheck.unityにPlayerのPrefabを配置し、必要なCameraなどを用意して保存します。- Playし、WASDと矢印キーで上下左右に動くことを確認します。動かない場合はGameビューのフォーカス、Console、Input System設定を順に確認します。
- Playを止め、PlayerのPrefabとスクリプト、
PlayerCheck.unity、各.metaを差分で確認します。テストシーンは次回も使うため残します。 MainScene.unityがChangesに出ていないことを確認してCommit・Pushします。
この段階で確認するのはPlayer単体の移動です。Coinとの接触や最終配置は統合PRで確認します。
STEP 4:BさんがCoinとスコアを作り、専用シーンで確認する
BさんはCoin.cs、CoinCounter.csを作り、それぞれCoin.prefabとCoinCounter.prefabに保存します。CoinのCircle Collider 2DではIs TriggerをONにします。
Coin.cs
using UnityEngine;
public class Coin : MonoBehaviour
{
private bool collected;
private void OnTriggerEnter2D(Collider2D other)
{
if (collected || !other.CompareTag("Player")) return;
collected = true;
CoinCounter.AddCoin();
Destroy(gameObject);
}
}
CoinCounter.cs
using UnityEngine;
public class CoinCounter : MonoBehaviour
{
private const int Goal = 3;
private static int count;
private void Awake()
{
count = 0;
}
public static void AddCoin()
{
count++;
}
private void OnGUI()
{
GUI.Label(new Rect(20, 20, 260, 40), $"Coins: {count} / {Goal}");
if (count >= Goal)
{
GUI.Label(new Rect(20, 60, 260, 40), "CLEAR!");
}
}
}
このコードは元記事の小さな教材用サンプルです。OnGUIやstaticのカウントを採用したまま、ここではチームの分担と検証の流れに焦点を当てます。UIや状態管理を拡張する際は、別の設計課題として扱います。
CoinCheck.unityを作り、CoinとCoinCounterのPrefab、Playerタグ・Rigidbody 2D・Box Collider 2Dを持つテスト用オブジェクトを置いて保存します。- Playし、Coinへの接触でCoinが消え、カウントが増えることを確認します。3個で
CLEAR!が出ることも確かめます。 - スクリプト、Prefab、
CoinCheck.unity、各.metaの差分を確認します。共有のMainScene.unityは担当PRに含めません。 - 確認した結果をPRに書ける形で残し、Commit・Pushします。
STEP 5:PRで成果物と再現手順をレビューする

各自がbaseをmain、compareを担当ブランチとしてPRを作ります。説明には目的、変更ファイル、テストシーンの開き方、実際に確認した操作と結果、未確認の範囲を記載します。「動いた」だけで終えず、レビュー担当が再現できる情報を残します。
- 担当外のファイルや
MainScene.unityが混ざっていないか。 - Prefabとスクリプトに対応する
.metaが含まれるか。 - テストシーンを開いてPlayし、説明どおりの結果になるか。
- Consoleのエラー、PrefabのMissing Script、意図しないOverrideがないか。
この例ではAさんのPRを先にレビュー・マージします。BさんはGitHub DesktopでmainをFetch・Pullし、作業ブランチへ戻ってUpdate from mainを行い、再確認してPushします。その後BさんのPRをレビュー・マージします。

チェックを外しただけのローカル変更はPCに残ります。Pullやブランチ切り替えの前にChangesを確認し、必要な変更はCommitまたは一時退避します。不要なテスト変更だけを破棄するときも、対象ファイルと差分を確認します。
STEP 6:共有シーンを統合担当が更新する
両担当のPrefabがmainに入ったら、Aさんは最新のmainからfeature/integrate-sceneを作ります。このブランチで初めてMainScene.unityの正式な配置を行います。Bさんは同時にこのシーンを編集しません。
- PlayerのPrefabを配置し、シーン上のインスタンスに
Tag = Playerを指定します。Prefab本体へApplyするかどうかは変更の意図を確認して決めます。 - CoinのPrefabを3個、CoinCounterのPrefabを1個配置し、Cameraから全て見えるようにします。
- Playで移動、接触、
Coins: 1 / 3から3 / 3までの表示、最後のCLEAR!を確認します。 - シーンを保存し、
MainScene.unityの差分に意図した配置と設定だけが含まれることを確認します。 - 統合PRを作り、Bさんがレビューしてからマージします。2人とも最新の
mainをPullし、各自のPCで完成条件を確認します。
シーンの競合を減らすために担当を決めていますが、担当者を固定すること自体が目的ではありません。引き継ぐときは、作業ブランチ、未Commitの変更、テスト結果を伝え、同じシーンを同時に編集しない状態にします。
継続して開発するときの確認
- テストシーンは「誰がどの機能を試すか」で分け、使わなくなったものはPRで整理します。チームで再現する価値があるものを残します。
- Prefabの単体確認、担当別シーンでの動作確認、統合シーンでの全体確認を混同せず、PRごとに何を確認したか書きます。
- 繰り返し失敗を検出したい移動や接触の動作は、必要に応じてUnity Test FrameworkのPlay Modeテストに移します。
- 共有シーンに変更が必要な場合は担当者と対象ブランチを決め、レビュー付きのPRで反映します。複雑なシーンの競合が起きたら、差分を読み、必要に応じてUnityYAMLMergeも検討します。
実習記事との違い
| 項目 | 6ステップの実習記事 | この実務フロー |
|---|---|---|
| 動作確認 | MainScene.unityで一時的に試し、テスト用変更を破棄 | 担当別テストシーンを保存し、必要ならPRで共有 |
| Prefab | 担当別に作成 | Prefab ModeとOverrideを意識して編集 |
| 共有シーン | 最後にAさんが統合 | 統合担当を決め、シーンの差分と動作をレビュー |
| 確認の記録 | 手動でPlay | PRに再現手順と結果を残し、必要なものをPlay Modeテストに移行 |
どちらも同じ小さなゲームを題材にしています。実習記事で分担とPRの順序をつかんだら、この手順で「確認を残し、次の変更でも使える」開発へ進んでください。
公式資料
- Unity:Prefab Modeで編集する
- Unity:Test Framework
- Unity:アセットとフォルダーの.meta
- Unity:Smart Merge
- GitHub:GitHub Desktopで変更を確認してCommitする
- GitHub:GitHub Desktopでブランチを管理する









ディスカッション
コメント一覧
まだ、コメントがありません