本講座ではUnityで3Dレースゲームの作り方について説明しており、今回は第7回目となります。
前回の記事 :
前回記事ではマップの作成とリトライ処理を作成しました。
今回は一人でレースするのではなく対戦相手となるNPCを作成していきます。Unityでゲームオブジェクトに簡単な移動AIや経路設計を行うのに便利なCinemachine機能の使い方をマスターしていきましょう!
では始めていきましょう!
対戦相手となるCPUの車オブジェクトの作成
今回は対戦相手として自動で動く車を作成していきますが、これにはとてもいろんなアプローチがあります。今回の作成方法はその一つになります。
Unityでゲームを作成するときには色々なところに応用ができる機能を利用・実装していくので今後のオリジナルゲーム開発の参考にしてください。
Cinemachineのインポート
今回使用するパッケージをインポートします。UnityにあるパッケージなのでPackageManagerからインポートできます。
では上部メニューで「Window→PackageManager」をクリックしてウインドウを開きます。
ウインドウの左上が「UnityRegistry」になっていることを確認、なっていなかったらクリックして変更します。そして「Cinemachine」を選択し、右下の「Install」ボタンをクリックします。
これでインストールの完了です。
CPUの車作成
ではまずはCPUの車を作成していきます。
Hierarchyで空オブジェクトを作成し「CPU」という名前にします。次にUnity上部メニューに新しくできた「Cinemachine」をクリックし「Create Dolly Track with Cart」を選択します。
(追記:2021以降のバージョンでは「Cinemachine」は上部メニューの「GameObject」の中にあります)
するとHierarchyに「DollyTrack1」と「DollyCart1」の二つが作成されますので、これら二つをドラック&ドロップして「CPU」の子にしましょう。
次に、車を配置していきます。
Projectウインドウの「Assets/ARCADE – FREE Racing Car/Prefabs」にある「Free_Racing_Car_Red」をドラック&ドロップして、「DollyCart1」の子に配置しましょう。
まずは、Playerと同じ大きさにするため、この「Free_Racing_Car_Red」のScaleを全て0.8に変更しておきましょう。
そして位置の調整をしていきます。まず、もしこの段階で「Player」の車が浮いていたり、スタート位置がおかしかったりしたら、調整しておきます。そして、作成した「CPU」ごとSceneウインドウで「Player」の少し後ろあたりに来るように移動ましょう。(この時「CPU」以下の子を動かさないように注意してください)
また、高さは地面に車が乗っている状態に見える程度に下げておきます。角度が変な方向を向いていても今は気にしないで大丈夫です、位置、高さのみ調整します。
参考にこの状態での「Player」「CPU」の「Transform」の値を載せておきますが、この通りでなくても大体見た目で問題なければ大丈夫です。
これで一旦作成の完了です。
Cinemachineの使い方 対戦相手の移動ルートを作って実践
では次にこの車を移動していきます。
少し特殊な方法で移動しますので、まずはHierarchyで「DollyTrack1」を選択してInspectorを見てみましょう。
この「CinemachineSmoothPath」の「waypoint」という項目があります。まずはこの「0」の項目の値をすべて「0」にしておきましょう。もしここに先に値が入っていた場合、全て0にした影響で位置が変わるので、再度「CPU」を移動してスタート位置に戻しておきましょう。
この時の状態が下記のようになります。(waypoint「1」の値は今はなんでも大丈夫です)
今設定した「waypoint」を「DollyCart1」が順に移動することになります。各ポイントの間はいい感じに結んでくれて、このポイントを増やしていくことでより長く自由な経路を設定することができます。
これがCinemachineの機能の一つで「指定経路を指定時間で移動する」という動作を簡単に作成することができます。(元は「Cinemachine」の名前の通り、映画のようなムービーのカメラワークのためのカートのイメージですね。)
ここで、Inspectorの「waypoint」の右下にある「+」ボタンを押して項目を追加します。すると「2」の項目ができたので、その「2」のマークをクリックして選択します。
次に、Sceneウインドウを見ると選択した、「0」「1」「2」の表記のあるマークがありますので、これをMoveToolで動かすことでそれぞれ移動することができます。
先に「2」をクリックしていると、「2」に移動の矢印がでますのでまずは適当に移動してみてください。すると画像のように緑色のレールのようなものが見えます。このレールが経路となり、「0→1→2」の順にこの上を「DollyCart1」が走ります。
(コースの地面があると重なって見えないので一旦消しておきましょう。確認できたら戻してください)
Cinemachineのwaypointで移動経路を設定しよう
ではここから経路を追加していきます。
先に「waypoint」を追加しましたが、その手順で何個も追加して一つ一つ位置を調整していきます。まず右下の「+」ボタンを2回押して、0〜4までの5つのポイントを作成しましょう。
Inspector上で「waypoint」の該当ポイントを選択しておけばそのポイントを移動することができますので、0〜4のポイントをSceneウインドウで下記の画像のように移動しましょう。
このポイント設定ができたら一旦Hierarchyで「DollyCart1」を選択してInspectorをみてください。「Cinemachine Dolly Cart」の一番下に「Position」という値があります。
この値が現在地になります。試しにこの値を適当に変更してみると車が移動しているのがわかるかと思います。
つまり、この「Position」の値をスクリプトで変更することによって車を自動で移動させることができる、というのがこの「Cinemachine」を使った移動方法です。
では、ここから超繰り返し作業です!
ひたすら「waypoint」をコース上の道路の部分に追加して一周してみましょう。なおポイントのYの値(高さ)は全て0のままにしておきましょう。ポイントが多すぎても問題はありませんが、大体30〜50個のポイントが必要になります。参考までにInspectorを載せますが、もちろん数値まで同じである必要はありません。
画像では計0〜41のポイントになりました。この場合の「41」つまり最後のポイントは、ゲート前の最初の値「0」の数値をコピーして同じ値にしておきましょう。これで1周が完成します。(結局すべて0にすればOKです)
ここで0は、ゲートの前にあるのでまだ一周できていないことに注意しておきましょう。
C#スクリプトでCinemachineを利用した移動処理を作成
ではスクリプトで移動処理を作成していきます。
Projectウインドウで新しくC#スクリプトを「Assets/AppMain/Script」に作成し「CPUController」という名前にしましょう。このスクリプトをあらかじめHierarchyの「CPU」にドラック&ドロップして付与しておきます。
では、書いていきましょう。
次回記事に進む前に
今回はここまでにしましょう。
一つ注意点ですが、今回結構薄めのゲートコライダーを使って周回数を計測していますので、CPUの速度をあげすぎるとうまく判定されない場合があります。
1周するための周回時間lapTimeが40fだと計測判定されないはずです。この段階で動かしたい人は必要な秒数を倍の80fなどにして実際に違いが出るか確認してみましょう。詳しくは次節でも取り扱います。
CPUの細かい調整、またコライダーを追加したことによるPlayerとの衝突、周回数を計測して順位を付ける部分などを次回作成していきます。
次回の記事 :
コメント