Unity 6でAIを使ってプレイヤーを動かす方法|ChatGPTでC#スクリプトを作成

Unity 6でAIを使ってプレイヤーを動かす初心者向け記事のアイキャッチ画像 Unity

前回は、Unity 6でCubeを仮のプレイヤーとして配置し、TransformやMaterialなどの基本設定を行いました。

今回は、いよいよそのPlayerをキーボードで動かしてみます。

ただし、最初から自分ですべてのC#コードを書くのではなく、このブログのテーマでもあるAIを活用します。

ChatGPTなどのAIに「Unityでプレイヤーを動かしたい」と相談し、C#スクリプトを作成してもらいながら実装を進めます。

AIが生成したコードをコピーするだけではなく、どこにスクリプトを作るのか、どのGameObjectに設定するのか、コードが何をしているのかについても初心者向けに確認していきます。

前回のPlayer作成については、こちらの記事で解説しています。

Unity 6でプレイヤーキャラクターを配置する方法|初心者向けに基本設定を解説

今回実装するプレイヤー操作

今回は、キーボードを使ってPlayerを前後左右に動かせるようにします。

最初からジャンプやダッシュ、アニメーションなどを追加するとコードが複雑になるため、まずはシンプルな移動だけを実装します。

今回の目標は、

  • Wキーで前へ移動
  • Sキーで後ろへ移動
  • Aキーで左へ移動
  • Dキーで右へ移動
  • 移動速度をInspectorから変更できる

という基本的な操作です。

まずは「キーを押すとPlayerが動く」というUnityの基本的な仕組みを理解することを目標にします。

AIにプレイヤー移動の方法を質問する

今回は、C#コードを最初から自分で書くのではなく、AIに相談するところから始めます。

例えばChatGPTに、

Unity 6で3DのPlayerをWASDキーで前後左右に移動させたいです。初心者でも分かるシンプルなC#スクリプトを作ってください。移動速度はInspectorから変更できるようにしてください。UnityのInput Managerを使う方法でお願いします。

と質問します。

ChatGPTにUnity 6のPlayer移動スクリプトを質問した画面
Unity 6でPlayerをWASD操作する方法をChatGPTに質問します。

AIに質問するときは、単に

プレイヤーを動かすコードを書いて

と伝えるよりも、

  • 使用しているUnityのバージョン
  • 2Dか3Dか
  • 何のキーで操作したいか
  • どのような動きを実装したいか

などを具体的に伝えた方が、自分の目的に合った回答を得やすくなります。

AIをゲーム制作で利用するときは、「何を作りたいのか」をできるだけ具体的に説明することが重要です。

AIが生成したコードを確認する

AIからC#スクリプトが生成されたら、すぐにUnityへ貼り付ける前に内容を簡単に確認します。

初心者の場合、コードをすべて理解する必要はありません。

まずは、

  • プレイヤーの移動速度を設定している部分
  • キーボード入力を取得している部分
  • 移動方向を計算している部分
  • Playerの位置を変更している部分

があることを確認します。

分からないコードがある場合は、AIにそのまま質問することもできます。

例えば、

このコードを初心者向けに1行ずつ説明してください。

と質問すれば、生成されたコードが何をしているのか説明してもらえます。

これはAIを使ってプログラミングを学ぶときにも便利な使い方です。

[SerializeField] private float moveSpeed = 5f;

Playerの移動速度です。SerializeFieldを付けることで、private変数でもUnityのInspectorから値を変更できます。

float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");

キーボードの左右・前後入力を取得しています。通常の設定では、HorizontalがA・D、VerticalがW・Sに対応します。

Vector3 movement = new Vector3(horizontal, 0f, vertical).normalized;

X方向とZ方向の入力から、Playerが移動する方向を作っています。Yを0にしているため、このコードでは上下方向には移動しません。

transform.Translate(
    movement * moveSpeed * Time.deltaTime,
    Space.World
);

計算した方向へPlayerを移動させます。Time.deltaTimeを掛けることで、PCのフレームレートによる移動速度の差を小さくします。

今回のスクリプトではInput Managerを使用するため、Unityの「Edit → Project Settings → Player → Active Input Handling」を「Both」に設定します。

Unity 6のActive Input HandlingをBothに設定した画面
Player SettingsのActive Input Handlingを「Both」に設定します。

PlayerMovementスクリプトを作成する

AIが生成したコードをUnityで使用するために、新しいC#スクリプトを作成します。

前回の記事でAssets内に作成した

Scripts

フォルダを使用します。

今回はプレイヤーの移動を担当するスクリプトなので、

PlayerMovement

という名前にします。

UnityのScriptsフォルダにPlayerMovementスクリプトを作成した画面
Scriptsフォルダ内に「PlayerMovement」C#スクリプトを作成します。

Unityでは、C#スクリプトのファイル名とクラス名を一致させることが重要です。

そのため、AIが生成したコードのクラス名も

PlayerMovement

になっていることを確認します。

作成したスクリプトを開き、AIから生成されたコードを入力します。

UnityでPlayerをWASD操作するPlayerMovementのC#コード
AIが提案したコードをPlayerMovementスクリプトに入力します。
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    [SerializeField] private float moveSpeed = 5f;

    private void Update()
    {
        float horizontal = Input.GetAxisRaw("Horizontal");
        float vertical = Input.GetAxisRaw("Vertical");

        Vector3 movement = new Vector3(horizontal, 0f, vertical).normalized;

        transform.Translate(
            movement * moveSpeed * Time.deltaTime,
            Space.World
        );
    }
}

保存したらUnityへ戻り、コンパイルが完了するまで少し待ちます。

Playerにスクリプトを追加する

C#スクリプトを作成しただけでは、Playerはまだ動きません。

作成したPlayerMovementスクリプトを、実際に動かしたいGameObjectへ追加する必要があります。

今回はHierarchyにある

Player

へスクリプトを追加します。

Playerを選択すると、Inspectorに設定されているComponentが表示されます。

そこへPlayerMovementを追加すると、スクリプト内で設定した項目もInspectorに表示されるようになります。

UnityでPlayerにPlayerMovementスクリプトを追加した画面
PlayerにPlayerMovementスクリプトを追加し、Move Speedを5に設定します。

今回のスクリプトでは、移動速度をInspectorから変更できるようにします。

例えば、

Move Speed = 5

のように設定しておけば、コードを書き直さなくてもInspectorから移動速度を調整できます。

Unityを再生してPlayerを動かす

スクリプトをPlayerに追加できたら、Unity上部のPlayボタンを押してゲームを実行します。

Gameビューをクリックしてから、

W

A

S

D

のキーを押してみます。

Playerがキー入力に合わせて移動すれば成功です。

UnityでWASDキーを使ってPlayerを移動させた画面
PlayモードでWASDキーを押すと、PlayerのPositionが変化して移動します。

最初は動作を確認することが目的なので、速度が少し速かったり遅かったりしても問題ありません。

InspectorのMove Speedを変更し、自分が操作しやすい速度を探してみます。

ここで重要なのは、

コードを書く → Unityで実際に動かす → 必要に応じて設定を変更する

という流れです。

AIが生成したコードでも、実際のUnity上で動作を確認することが必要です。

AIのコードが動かない場合はどうする?

AIが生成したコードは、必ず正しく動作するとは限りません。

Unityのバージョンやプロジェクトの設定によっては、エラーが発生することもあります。

例えば、

  • Consoleに赤いエラーが表示される
  • Playerがまったく動かない
  • キーを押しても反応しない
  • 想定とは違う方向へ動く

といった問題が発生する場合があります。

そのときは、AIにもう一度相談します。

特にエラーが表示された場合は、エラーメッセージを省略せずにAIへ伝えることが重要です。

例えば、

Unityでこのエラーが出ました。初心者向けに原因と修正方法を教えてください。

と伝え、その下にConsoleのエラーメッセージを貼り付けます。

必要であれば、自分が使用しているコードも一緒に送ります。

AIに「動きません」とだけ伝えるより、エラーや現在の状態を具体的に伝えた方が原因を見つけやすくなります。

今回は問題なく動作しましたが、AIが生成したコードは環境によってそのまま動かない場合もあります。

エラーが発生した場合は、Consoleに表示された内容を確認し、エラーメッセージと使用しているコードをAIに伝えて修正方法を質問します。

エラーが出なかった場合でも、Playerが想定した方向へ動くか、移動速度が適切かなどを実際に操作して確認することが重要です。

AIが生成したコードをそのまま信用しない

AIを使うと、短時間でC#コードを作成できるため非常に便利です。

しかし、生成されたコードが常に最適とは限りません。

古いUnity向けの方法が含まれていたり、現在のプロジェクト設定と合わなかったりすることもあります。

そのため、

AIにコードを作ってもらう

コードの内容を確認する

Unityで実際に実行する

問題があればAIに再度質問する

という流れで使用することが大切です。

このブログでも、AIが生成した回答をそのまま掲載するだけではなく、実際にUnityで試して動作を確認した内容を紹介していきます。

AIを使うことで初心者でもコードを書ける?

今回のような基本的なPlayer移動であれば、AIに相談することでC#に詳しくなくても実装を始めることができます。

さらに、

この変数は何ですか?

なぜUpdateの中に書くのですか?

この処理をもっと簡単にできますか?

といった質問も、その場でAIに聞くことができます。

分からないことを検索するだけではなく、自分のコードについて直接質問できる点はAIの大きなメリットです。

ただし、AIだけにすべてを任せるのではなく、実際にコードを動かしながら少しずつ仕組みを理解していくことも大切です。

今回のPlayer移動を通して、C#スクリプトがGameObjectを動かす基本的な仕組みも確認できます。

今回のまとめ

今回はAIに相談しながら、Unity 6でPlayerをキーボード操作できるようにする流れを確認しました。

AIへ具体的な質問を送り、生成されたC#コードをPlayerMovementスクリプトとしてUnityに追加します。

さらに、そのスクリプトをPlayerへ設定し、Gameビューで実際にWASDキーを使って動作を確認します。

AIを利用するとコード作成のハードルを下げることができますが、生成されたコードが必ず正しいとは限りません。

実際にUnityで動作を確認し、問題が発生した場合はエラー内容をAIに伝えながら修正していくことが重要です。

次回は地面と当たり判定を作る

Playerを自由に動かせるようになったら、次はゲーム世界を作っていきます。

現在のPlayerは移動できるようになっただけなので、次回はPlayerが立つための地面を作成します。

さらに、Playerが地面をすり抜けないようにするためのColliderやRigidbodyなど、Unityの物理演算に関係する基本的な機能も確認していきます。

最終的には、Playerを自由に操作しながらゲーム世界を移動できる状態を目指します。

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