NPCの動きの紹介
これまで私たちは、NPC(Non-Player Character)を一切使わない、リアルなプレイヤーだけのゲームを作ってきました。
Robloxのゲーム内で動作するNPCを作るにはどうしたらいいのでしょうか?
ここでは、Rigの作成方法と、NPCをある場所から別の場所へ、障害物があっても移動させることができるPathfindingServiceとは何かを見ていきます。
準備
1.通常通り、新しいBaseplateテンプレートを開きます。
2.以下のようなRig(NPC本体)を作成します。
3.部品を作成し、名前を「goal」とします。
第一部:ダイレクトムーブメント
ここからは、NPCを単純に移動させる方法について見ていきます。
1.ダミー “の名前を “npcModel “に変更します。 npcModel」の下にスクリプトを作成し、「moveNpc」と命名します。
2.moveNpcの内部で、次のように入力します。
- 1行目:npcModelからHumanoidを探し、”npc “に代入する。
- 3行目HumanoidRootPartのアンカーを削除し、NPCが移動できるようにします。
- 5行目NPCヒューマノイドをゴールの位置に移動させる(作成した緑色の部分)
ここで「実行」をクリックすると、NPCが動き出すはずです。
第二部:障害物を乗り越える
とても素晴らしい うちのNPCがやっと自分で動けるようになりました
しかし、その中間にあるものはどうなるのでしょうか? 壁みたいなもの?
間に壁を作る。
そして、実行をクリックします。
おっと……。
まず、”PathfindingService “を使って経路を計算します。
- 行目:PathfindingServiceをスクリプトにインクルードする
- 4行目胴体を取得し、それを使って8行目でパスを計算します。
- line 5:ゴール部分の取得
- 9行目PathfindingService を使ってパスを作成する
- line 10: 最短距離での経路を計算する(この場合、トルソー位置からゴール位置まで)。
そして、パスを可視化するためには、次のようなものが必要です。
- line 13: 計算した経路から、経路に沿った点を作成します。
- line 14: game.Workspace の下に新しいフォルダを作成し、すべてのウェイポイントマークを保存します。
- 16-26行目各ウェイポイントマークを、目に見える小さな黄色い点に可視化します。
そして、今「実行」をクリックすると、ビジュアルパスが表示されます。
ここで、次のように入力すると、計算されたパスに沿って移動します。
- 30行目現在のループ内の次のウェイポイントに移動する
- 31行目次のウェイポイントに到達するまで一時停止する
第三部:障害物を越え、隙間を飛び越える
NPCのために、もっと難しいものを作ろう!
現在の環境とファイルを使って、次のように作成します。
今、「実行」をクリックするとどうなりますか?
正しい経路が計算されているのがわかると思いますが、実際にはNPCはゴールにたどり着けません。
ジャンプを知らないので、真ん中で止まってしまいました
そこで、28行目から、次のように変更します。
- 30行目:コンピュータがNPCをジャンプさせるべきと判断した場合
- 32行目NPC の状態を Walking から Jumping に変更する。
では、もう一度やってみましょう。