AI統合型コードエディタ「Cursor」をUnityゲーム開発に使ってみた話
結論:「Cursorがすごい」と聞いて試したら思ったよりすごかった
Cursorについて
AI統合型IDE(コードエディタ)。
Chat GPTのような対話型エージェントが搭載されたコードエディタです。
Unityのフォルダを開いておくとAIがコードを読んでくれて、プロンプトの指示を元に直接ファイルを書き換えコーディングをしてくれます。
VS Codeをベースにしてるので普通のコードエディタとしても使えます。
やらせてみたタスク
開発中のゲームに、ミニゲームの単体確認シーンを実装する
前提
これが開発中のゲーム内の「クレーンゲーム」というミニゲーム(プリミティブな画面が映ってますが気にせず)。
元々単体で動いていたのですが、冒頭のお金を払うシーケンスを作る過程で、クレーン画面はシーン層から操作する設計になり動かなくなりました。
単体確認は今後も使いたかったので表題の実装が必要に。
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回しか遊べなかったので修正を指示。
こちらもやはり指示通り修正してくれました。
以上で完了。↓この通り、テキストメッセージなしでクレーンだけを繰り返し遊ぶテストシーンが作れました!
感想
自分で実装しても簡単なタスクとはいえ15分はかかっていた気がしますし、わざわざエラーハンドリングやコメントは入れなかったと思います。
一方Cursorは5分。慣れたら3分で完了しそうで、コード品質も高かったです。
衝撃が大きかったので、私も プロ驚き屋 デビューしようと思いました!

