ゲーム開発チーム「丸ダイス」の開発ブログです! 公式サイトはこちら

AI統合型コードエディタ「Cursor」をUnityゲーム開発に使ってみた話

結論:「Cursorがすごい」と聞いて試したら思ったよりすごかった

Cursorについて

Cursor - The AI Code Editor

AI統合型IDE(コードエディタ)。

Chat GPTのような対話型エージェントが搭載されたコードエディタです。

Unityのフォルダを開いておくとAIがコードを読んでくれて、プロンプトの指示を元に直接ファイルを書き換えコーディングをしてくれます。

VS Codeをベースにしてるので普通のコードエディタとしても使えます。

やらせてみたタスク

開発中のゲームに、ミニゲームの単体確認シーンを実装する

前提

youtu.be

これが開発中のゲーム内の「クレーンゲーム」というミニゲーム(プリミティブな画面が映ってますが気にせず)。

元々単体で動いていたのですが、冒頭のお金を払うシーケンスを作る過程で、クレーン画面はシーン層から操作する設計になり動かなくなりました。

単体確認は今後も使いたかったので表題の実装が必要に。

1回目のプロンプト

CraneTestSceneというクラスを実装して下さい。 CraneGiftPlacementをInspectorから指定し、それを引数にCrane3dCtrlクラスを初期化、Crane3dCtrlでの1回のプレイサイクルを繰り返すクラスにして下さい。

▼生成されたコード(クリックで展開)

using UnityEngine;
using Cysharp.Threading.Tasks;

/// <summary>
/// クレーンのテストシーン制御
/// </summary>
public class CraneTestScene : MonoBehaviour
{
    [SerializeField] private CraneGiftPlacement _giftPlacement;
    [SerializeField] private Crane3dCtrl _craneCtrl;

    private void Start()
    {
        InitializeCrane();
    }

    private void Update()
    {
        _craneCtrl.MyUpdate();
    }

    private void InitializeCrane()
    {
        if (_giftPlacement == null || _craneCtrl == null)
        {
            Debug.LogError("CraneGiftPlacementまたはCrane3dCtrlが設定されていません。");
            return;
        }

        _craneCtrl.SetupPlacement(_giftPlacement);
        _craneCtrl.SetupPlay();
    }

    public async UniTask<ItemInfo> PlayOneCycle()
    {
        _craneCtrl.SetupPlay();
        
        // プレイが完了するまで待機
        while (true)
        {
            if (_craneCtrl.CheckPlayDone(out ItemInfo getGift))
            {
                return getGift;
            }
            await UniTask.Yield();
        }
    }
} 

普通に合っていました。

しかも、Cursor上で「Accept」を押すだけでファイルごと生成されるのでコピペも不要。

Crane3dCtrlがクレーン画面を制御するクラスですが、使い方は説明してません。コードを読んで理解したようです。

理解すれば簡単に扱えるクラスですが行数は多く、コードを正しく読む能力が必要なタスクです。

少なくとも1,2年の実務経験レベルのコーディング能力があると感じました。

2回目のプロンプト

PlayOneCycleは必要ありません。代わりに、Update内でプレイが終了したら再度SetupPlayするようにして下さい。 完了時のGiftは無視して構いません。

▼コード(クリックで展開)

using UnityEngine;
using Cysharp.Threading.Tasks;

/// <summary>
/// クレーンのテストシーン制御
/// </summary>
public class CraneTestScene : CacheBehaviour
{
    [SerializeField] private CraneGiftPlacement _giftPlacement;
    [SerializeField] private Crane3dCtrl _craneCtrl;

    private void Start()
    {
        InitializeCrane();
    }

    private void Update()
    {
        _craneCtrl.MyUpdate();

        // プレイが完了したら次のプレイを開始
        if (_craneCtrl.CheckPlayDone(out _))
        {
            _craneCtrl.SetupPlay();
        }
    }

    private void InitializeCrane()
    {
        if (_giftPlacement == null || _craneCtrl == null)
        {
            Debug.LogError("CraneGiftPlacementまたはCrane3dCtrlが設定されていません。");
            return;
        }

        _craneCtrl.SetupPlacement(_giftPlacement);
        _craneCtrl.SetupPlay();
    }
} 

動いたものの1回しか遊べなかったので修正を指示。

こちらもやはり指示通り修正してくれました。

以上で完了。↓この通り、テキストメッセージなしでクレーンだけを繰り返し遊ぶテストシーンが作れました!

www.youtube.com

感想

自分で実装しても簡単なタスクとはいえ15分はかかっていた気がしますし、わざわざエラーハンドリングやコメントは入れなかったと思います。

一方Cursorは5分。慣れたら3分で完了しそうで、コード品質も高かったです。

衝撃が大きかったので、私も プロ驚き屋 デビューしようと思いました!