ふくふくHukuhuku Inc.
EP.03LLM Gamedev 12分公開: 2026-05-26

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 / の開発実例。 連動度 ★4 ですが、エコシステムの大きさで を補って余りある選択肢です。

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 の組合せ。

シェア

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

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

シリーズの外も探す:

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

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

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