PR

AIとゲームつくる│GODOT x AI の基本

AIとゲームつくる
PR
PR

GODOT x AI の基本フロー

所定のフォルダに適当に新しいテキストファイルをつくってそれをリネームして
 AIが出してきたファイル名と同じ名前のファイルを作る

 ※.txtのところを .gdとか .tscn .tresとかにする 
 ※名前が違うだけで全部テキストファイル 

AIが出してきたコードを①でつくったファイルにコピペする

①と②を繰り返すのが基本

※何がかいてあるかはとりあえずわからなくてOK
※細かい調整がしたくなったりエラーの原因をつきとめる必要がでてきたら何が書いてあるかがわかれば融通が利く

エディタは僕はNotepad++を使ってるのだ
当然無料ツールなのだ


画像はGeminiに出してもらうのが良い

ChatGPTはすぐに回数制限がくるうえに
生成能力も画像に関してはGeminiの方が優秀な気がするのだ

Geminiはpngで画像を出してくるクセに透過処理をできないけども背景を一色でだしてもらえば他のツールで透過処理しやすい


僕は使い慣れているからGIMPで手作業でやってるのだ
当然無料ツールなのだ

そして透過処理した画像をAIの出してきたコードに書いてある場所におく


AIを使うなら GODOTのGUIは最低限しか使わないほうがいい

Vibe CodingでGodotを使う時使うのは 3かしょだけ

デバッグ機能しか使わないのだ


 実際の挙動を人間が確認して変な所やこうしたいというのをAIに共有する

 出力のタブでAIが設定したデバッグメッセージをコピペでAIに共有する
  ※.gd内で print() とかで書かれているメッセージ

 デバッガ―のタブではGodotが出すエラーをコピペでAIに共有する


これだけでいい

他のところは何の機能なのか知る必要もない


Godotでやっていこうと言う話をした後の続きから

最初にChatGPTに依頼してみた

もし次のステップに進むなら、
**「Godotでの最小アクションゲームの完成形」**から作ってしまえば、
1日で動画ネタ用のプロトができます。

次、それやってみます?

うんじゃあやってみて

OK、じゃあGodotでの最小アクションゲームをAI全開で作る手順、
この場でそのまま進めます。

まずはゴールを明確化します。
今回は「動画映えする最小限アクションゲーム」を作るので、仕様はこうします👇


🎯 仕様(最小構成)

  • プレイヤーキャラが左右移動&ジャンプ可能
  • 床の上でのみ移動でき、落ちるとゲームオーバー
  • 1種類の敵がウロウロしていて、当たるとHP減少
  • HP0でゲームオーバー
  • スコアが時間経過で増える
  • 1画面で完結(背景+床+キャラ+敵)
  • 動画で見た瞬間に「遊べる感」あり

🛠 必要ファイル構成

project/
  main.tscn
  Player.gd
  Enemy.gd
  UI.gd
  assets/
    player.png
    enemy.png
    background.png
    floor.png

1️⃣ Godotプロジェクト作成

  1. Godot 4.xを起動 → 新規プロジェクト作成
  2. projectという名前のフォルダを作成し指定
  3. 2Dプロジェクトで開始

2️⃣ 最小シーン(main.tscn)作成

  1. Node2Dをルートにする
  2. 子ノードにSprite2Dを追加 → 背景画像設定
  3. 子ノードにStaticBody2DCollisionShape2D(床)追加
  4. Player(後でスクリプト付ける)追加
  5. Enemy(後でスクリプト付ける)追加
  6. UI用にCanvasLayerを追加

3️⃣ GDScriptコード(プレイヤー)

# Player.gd
extends CharacterBody2D

@export var speed := 200
@export var jump_force := -400
@export var gravity := 900
@export var max_jumps := 2

var jumps_left := 0
var hp := 3

func _ready():
    jumps_left = max_jumps

func _physics_process(delta):
    # 横移動
    var direction = Input.get_axis("ui_left", "ui_right")
    velocity.x = direction * speed

    # 重力
    if not is_on_floor():
        velocity.y += gravity * delta
    else:
        jumps_left = max_jumps

    # ジャンプ
    if Input.is_action_just_pressed("ui_accept") and jumps_left > 0:
        velocity.y = jump_force
        jumps_left -= 1

    move_and_slide()

func take_damage():
    hp -= 1
    if hp <= 0:
        get_tree().reload_current_scene()

4️⃣ GDScriptコード(敵)

# Enemy.gd
extends CharacterBody2D

@export var speed := 100
@export var move_range := 100

var start_pos
var direction := 1

func _ready():
    start_pos = position

func _physics_process(delta):
    position.x += direction * speed * delta
    if abs(position.x - start_pos.x) > move_range:
        direction *= -1

5️⃣ 当たり判定(簡易)

  • PlayerEnemy両方にArea2DCollisionShape2Dを追加
  • PlayerArea2Dbody_enteredシグナル → take_damage()呼び出し

6️⃣ UIスクリプト

# UI.gd
extends CanvasLayer

@onready var score_label = $ScoreLabel
var score := 0

func _process(delta):
    score += delta
    score_label.text = "Score: %d" % score

これを順にGodotで配置して実行すると、

  • キャラが左右に動く
  • ジャンプ可能
  • 敵と当たるとHP減
  • 落下でゲームリセット
    の状態が動きます。

このあと

  • 素材画像をAIで作る
  • 演出追加(HPバーや効果音)
    をすれば、動画用に映える1本目になります。

次はこの全部入り完成形を、Gemini CLIでも渡せるような「1ファイルまとめコード」にして出すこともできますが、
それ、すぐやっちゃいますか?
動くやつをそのまま1ファイルで渡せる形にします。

OK、じゃあGodotでの最小アクションゲームをAI全開で作る手順、
この場でそのまま進めます。

🎯 仕様(最小構成)

  • プレイヤーキャラが左右移動&ジャンプ可能
  • 床の上でのみ移動でき、落ちるとゲームオーバー
  • 1種類の敵がウロウロしていて、当たるとHP減少
  • HP0でゲームオーバー
  • スコアが時間経過で増える
  • 1画面で完結(背景+床+キャラ+敵)
  • 動画で見た瞬間に「遊べる感」あり

こう言ってChatGPTが出してきたコードは
ちょっとは動くけどいろいろ問題があって
これを指摘してもう一回ださせてとやってみたけど 
どうも完全には修正できない感じなのでClaudeに直してもらった(動いてる感じは動画で見てみてください)

※Claudeは全部Claudeに任した方がいいんじゃない?ってぐらい他のAIとの間に実力差がある

じゃー最初からClaudeにやってもらえばいいじゃんって話なんだけども 無料枠を有効活用する上でChatGPTやGrokの方が手軽に聞きやすいのだ


Claudeに修正依頼する

これ今あたってもダメージ食らわないんだけど 直せる?

コードを見てみると、プレイヤーがダメージを受けない原因がいくつかあります。主な問題を修正しましょう。

※Claudeのいいところはたくさんあるけど大きなことのひとつにファイルを直でアップロードして読み込んで何のファイルなのかをちゃんと把握してくれる事というのがあげられる 

※ChatGPTとかはアップロードするのにも回数制限がある上にアップロードしたファイルをちゃんと理解する事もできない。だからChatGPTやGrokはテキスト入力欄にコードも全文入力していく形になる。

実際に動いているところは動画で見てみてください

コメント

タイトルとURLをコピーしました