ふくふくHukuhuku LLC
EP.03LLM Gamedev 12分公開: 更新:

Unity 6 × Cursor ── C# 生成と prefab バイナリ問題の付き合い方

Unity 6 と Cursor / Claude Code を組合せた開発実例。C# script の生成精度、Muse の使いどころ、Asset Store との棲み分け、prefab がバイナリで LLM が直接いじりにくい問題への対処。

#Unity#Cursor#C##Muse#Asset Store
執筆 / 監修
松尾 亮合同会社ふくふく 代表社員

データ基盤・データパイプライン構築 / BI / 生成 AI 活用支援を専門とするエンジニア (28 年)。 本記事は AI 利用ポリシーに基づき、生成 AI の補助で執筆 → 人間が監修・編集して公開しています。

プロフィール詳細
シェア

EP.02 で を扱いました。本 EP は 6 × Cursor / の開発実例。Unity は 連動度 ★4 ですが、エコシステムの大きさで Godot を補って余りある選択肢です。

1. なぜ Unity を選ぶか

  • 求人最多: ゲーム業界で C# / Unity の経験者を求める案件が多い
  • Asset Store の厚み: 何でも揃う、購入価格 < 自前開発時間 のことが多い
  • マルチプラットフォーム: モバイル / コンソール (PS / Switch / Xbox) / PC / WebGL の同時対応が一番楽
  • 公式の安心感: Unity Technologies 社による継続開発、トレーニング・認定資格あり

2. Cursor のセットアップ

Cursor + Unity 連携
Bash
# 1. Cursor をインストール (https://cursor.com/)# 2. Unity の External Tools を Cursor に設定:#    Unity → Preferences → External Tools → External Script Editor → Cursor# 3. Cursor 側で C# 拡張をインストール (Unity の OmniSharp / C# Dev Kit)# 4. プロジェクトを開く: File → Open Folder → /path/to/UnityProject
# Claude を統合 (Cursor は GPT/Claude 切替可、設定で Claude Opus を選択)

3. Claude / Cursor に書かせる Player.cs

Unity 6 用 PlayerController.cs
Code
using UnityEngine;
[RequireComponent(typeof(Rigidbody2D))]public class PlayerController : MonoBehaviour{    [SerializeField] private float speed = 5f;    [SerializeField] private float jumpForce = 12f;    [SerializeField] private LayerMask groundLayer;    [SerializeField] private Transform groundCheck;
    private Rigidbody2D rb;    private Animator animator;    private bool isGrounded;
    void Awake()    {        rb = GetComponent<Rigidbody2D>();        animator = GetComponent<Animator>();    }
    void Update()    {        // 接地判定        isGrounded = Physics2D.OverlapCircle(groundCheck.position, 0.2f, groundLayer);
        // 横移動        float horizontal = Input.GetAxisRaw("Horizontal");        rb.linearVelocity = new Vector2(horizontal * speed, rb.linearVelocity.y);
        if (horizontal != 0)        {            transform.localScale = new Vector3(Mathf.Sign(horizontal), 1, 1);            animator.SetBool("Running", true);        }        else        {            animator.SetBool("Running", false);        }
        // ジャンプ        if (Input.GetButtonDown("Jump") && isGrounded)        {            rb.linearVelocity = new Vector2(rb.linearVelocity.x, jumpForce);        }    }}
Unity 6 で velocity → linearVelocity に rename

Unity 6 (2024 LTS) で Rigidbody2D.velocity が linearVelocity に rename された。Claude が velocity と書いてきたら deprecate warning が出る。プロンプトに「Unity 6 で」と入れると正しい名前を選ぶようになる。

4. ScriptableObject でデータを外出し (LLM 連動の鍵)

MonoBehaviour に直書きされたパラメータは prefab に保存され、LLM が読みづらい。ScriptableObject にデータを外出しすれば、JSON 風アセット (.asset) として読み書きできる。

EnemyData.cs (ScriptableObject)
Code
using UnityEngine;
[CreateAssetMenu(fileName = "Enemy", menuName = "GameData/Enemy")]public class EnemyData : ScriptableObject{    public string enemyName;    public int maxHp;    public float moveSpeed;    public int attackPower;    public Sprite icon;    public AudioClip deathSound;}
// 使い方: Editor で右クリック → Create → GameData → Enemy// 生成された .asset は YAML テキストなので Claude が読み書きできる

5. Cursor でやる典型ワークフロー

  1. 1仕様を Cursor のチャットに書く: 「敵 AI を作って。プレイヤーを見つけたら追跡、距離 5 以内で攻撃」
  2. 2コード生成 → 受入れ: Tab で 1 行ずつ accept、または Cmd+I でファイル全体生成
  3. 3Unity Editor 側でコンポーネントを Attach + パラメータ調整: ここは人手
  4. 4動作確認 → エラーがあれば Console を Cursor チャットに貼ってデバッグ
  5. 5型エラーを Cursor が自動修正: C# は型情報が豊富なので LLM が直しやすい

6. Muse の現実

機能用途実用度
Muse ChatUnity API の質問中 (Cursor + Claude で代替可)
Muse TexturePBR テクスチャ生成高 (Substance より手軽)
Muse Animateヒューマノイドモーション生成高 (Mixamo の代替候補)
Muse Sprite2D スプライト生成中 (Stable Diffusion XL の方が自由度高)
Muse BehaviorAI 行動ツリー生成発展途上

7. Asset Store の付き合い方

  • 買ってもよいもの: Dialog system / Inventory / Save system / UI Tween / Editor 拡張
  • 自前で書くべき: ゲームの核 (戦闘 / メインループ / 物語システム)
  • 警戒: メンテ停止アセット (最終更新が 2 年前以上) は買わない
  • LLM 視点: アセットの API を Claude に説明して使い方を書かせるのは普通に成立する

8. Unity 固有のハマりどころ

問題対処
prefab のマージコンフリクトSmart Merge (UnityYAMLMerge) を Git に設定
Meta ファイルGUID が変わると参照切れ、.meta も必ずコミット
Editor で動くが Build で動かないStripping Level 設定、AOT 制約 (IL2CPP)
Coroutine の罠Object 破棄時に Coroutine が走り続けて NRE
Awake / Start / OnEnable 順序明示的に依存関係を書く (DI コンテナ or Service Locator)

9. Build 自動化

Editor/Build.cs ── CLI からのビルド
Code
using UnityEditor;using UnityEngine;
public class Build{    [MenuItem("Build/Build All")]    public static void BuildAll()    {        var scenes = new[] { "Assets/Scenes/Main.unity" };        BuildPipeline.BuildPlayer(scenes, "Build/Game.app",            BuildTarget.StandaloneOSX, BuildOptions.None);    }}
// CLI: Unity -batchmode -quit -projectPath . -executeMethod Build.BuildAll

10. 次の話

EP.04 は Unreal Engine 5 × LLM ── C++ コード生成と、Blueprint (ビジュアルスクリプト) を LLM でどう扱うか。MetaHuman / Nanite / Lumen といった Unreal 固有の強みと LLM の組合せ。

よくある質問

Cursor と Claude Code、Unity 開発でどちらが向く?
**Cursor は IDE 統合 (VSCode ベース) で型補完が効く** ので Unity の MonoBehaviour 補完を活かせる。**Claude Code は CLI ベースで大規模な複数ファイル変更に強い**。Unity 公式のスクリプトエディタ統合 (External Tools 設定) は Cursor の方が成熟。両者併用 (Cursor で書く、Claude Code で refactor) も普通。
Muse は使うべき?
**Muse Chat (Unity Editor 内 LLM)** は Unity 固有 API の質問に強いが、汎用コード生成は Claude / GPT の方が上。**Muse Texture / Muse Animate** は実用域 (簡易 PBR テクスチャ / モーション生成)。料金は Unity Pro/Plus サブスクに含まれる契約。個人開発で十分なら無料の Cursor + Claude で代替可。
prefab がバイナリで LLM がいじれない問題は?
**Unity の prefab は YAML テキスト** (.prefab ファイルは実は読める)。ただし GUID / fileID 参照が大量で人間も LLM も読みづらい。実用的な対処は: ①**コンポーネントの追加・パラメータ変更はエディタで手動**、②**ロジックは MonoBehaviour スクリプトに寄せる**、③**ScriptableObject でデータを外出し** すると LLM が読み書きしやすい。
URP / HDRP / Built-in、LLM 開発との相性は?
**URP (Universal Render Pipeline) が最も無難**: 公式ドキュメント・チュートリアルが豊富で LLM の学習データも揃う。HDRP はフォトリアル向けで規模が大、Built-in は legacy (新規プロジェクトは選ばない)。Shader Graph は GUI なので LLM 直接編集不可、Shader Lab (HLSL) は LLM 生成可。
Asset Store はどう使い分ける?
**「ありもの」は使う、「コア」は自前で書く**が原則。物理エンジン拡張 / dialog system / inventory system 等は買って早く済ませる。ゲームの独自性を作る部分は LLM で書き起こす方が、後の改修・拡張がしやすい。アセットの「30 分試して合わなければ捨てる」 を躊躇しないこと。
Unity の料金体系で気をつけることは?
**個人・小規模スタジオは Personal (無料、年間売上 20 万 USD まで)** で十分。それを超えたら Pro。**2023 年の Runtime Fee 騒動** は撤回されたが、Unity の料金体系は将来変更されうるので、コアプロジェクトを Unity 一本に絞らないリスク管理 (例: ロジック層を移植しやすく設計) も実務的には考える価値あり。
シェア

この記事の感想を教えてください

あなたの 1 クリックで、本当にこの記事は更新されます。「もっと詳しく」「続編希望」が一定数集まった記事は、 ふくふくが 実際に内容を拡充したり続編記事を公開 します。 送信したリアクションはお使いのブラウザに記録され、再カウントされません。

シリーズの外も探す:

まずは、現状を聞かせてください。

要件が固まっていなくて大丈夫です。現状診断と方針提案までを無料でお手伝いします。

無料相談フォームへ hello [at] hukuhuku [dot] co [dot] jp