【Roblox】自作モデルでプレイヤーを追いかけるNPCを作ろう!Humanoidの仕組み解説付き
はじめに
こんにちは!Robloxでゲーム開発を楽しんでいますか?
「自分で作ったオリジナルの3Dモデルを、キャラクターとして動かしてみたい!」と思ったことはありませんか?
この記事では、人型ではない自作モデル(今回は頭だけのモデルを例にします)をインポートし、プレイヤーを自動で追いかけるNPCにするための手順を、初心者にも分かりやすく解説します。
この記事を読めば、Humanoid
の基本的な仕組みを理解し、どんな形のモデルでも動かせるようになります!
🤖 この記事でできること
- 自作のオリジナルモデルをNPCとして動かす方法がわかる
- プレイヤーを追跡するスクリプトが手に入る
- NPCがうまく動かない時の調整方法(速度や段差対策)がわかる
NPCを動かすための「3つの心臓部」
いきなり手順に入る前に、NPCを動かすために絶対に必要となる3つの要素について理解しておきましょう。これを知っておくと、トラブルが起きた時に自分で解決しやすくなります。
-
Humanoid
モデルに「生命」を吹き込む魔法のようなオブジェクトです。体力、歩行速度、ジャンプ力などを管理し、MoveTo()
という「移動しろ!」という命令を実行する能力を持っています。 -
HumanoidRootPart
モデルの「体の中心」となる基準パーツです。Humanoid
はこのパーツの位置を基準にモデル全体を動かします。どんなに複雑なモデルでも、Robloxの世界ではこのパーツが「本体」として扱われます。 -
WeldConstraint
(溶接)
モデルがバラバラにならないための「接着剤」です。HumanoidRootPart
以外のパーツ(頭、手、足など)をこれですべて繋ぎ止め、一体となって動くようにします。
実装手順 (ステップ・バイ・ステップ)
それでは、実際に頭だけのオリジナルモデルを動かしていきましょう!
Step 1: モデルの準備と「中心」を決める
まずは、あなたが作ったモデルをRoblox Studioにインポートします。
- モデルをインポートし、中身を確認します。今回は、インポートしたモデルの中にあった地球のようなマテリアルのパーツをNPCの中心として使うことにします。
- その中心にしたいパーツの名前を
HumanoidRootPart
に変更します。これがNPCの魂になります。 - エクスプローラーでモデル(
TestModel
)を選択し、プロパティウィンドウでPrimaryPart
を探します。クリックして、先ほど名前を変えたHumanoidRootPart
を設定します。
モデルのPrimaryPartにHumanoidRootPartを設定する
Step 2: 「生命」を吹き込む
次に、モデルにHumanoid
オブジェクトを追加して、生命を宿します。
- エクスプローラーでモデル(
TestModel
)を右クリックします。 - 「オブジェクトを挿入」 → 「
Humanoid
」を選択します。
これだけで、モデルはRobloxの世界で「キャラクター」として認識されるようになります。
Step 3: スクリプトで「知能」を与える
いよいよ、プレイヤーを追いかけるための頭脳(スクリプト)を組み込みます。
- モデル(
TestModel
)を右クリック → 「オブジェクトを挿入」 → 「Script
」を選択します。 - 作成されたスクリプトに、以下のコードをそのまま貼り付けてください。
-- プレイヤー追跡スクリプト
-- このスクリプトを追跡させたいモデルの中に入れると、
-- 最も近いプレイヤーを追いかけ始めます。
local model = script.Parent
local humanoid = model:WaitForChild("Humanoid")
local rootPart = model:WaitForChild("HumanoidRootPart")
-- 追跡の更新頻度(秒)
local UPDATE_INTERVAL = 0.5
-- 追跡機能のメイン関数
local function findAndChaseNearestPlayer()
local nearestPlayer = nil
local minDistance = math.huge
for _, player in ipairs(game.Players:GetPlayers()) do
if player.Character and player.Character:FindFirstChild("HumanoidRootPart") then
local targetRootPart = player.Character.HumanoidRootPart
local distance = (rootPart.Position - targetRootPart.Position).Magnitude
if distance < minDistance then
minDistance = distance
nearestPlayer = player.Character
end
end
end
if nearestPlayer then
humanoid:MoveTo(nearestPlayer.HumanoidRootPart.Position)
end
end
-- 無限ループで追跡処理を繰り返し実行する
while true do
findAndChaseNearestPlayer()
task.wait(UPDATE_INTERVAL)
end
Step 4: 物理設定の最終チェック
⚠️ ここが一番のハマりどころです!
Humanoid
で動かすモデルは、物理的に地面に固定されていてはいけません。
- モデルを構成するすべてのパーツを選択し、プロパティの
Anchored
のチェックが外れていることを必ず確認してください。チェックが入っていると、Humanoid
がいくら「動け!」と命令しても、その場から一歩も動けません。
これで準備は完了です!ゲームをプレイして、NPCがあなたを追いかけてくるか確認してみましょう。
NPCの挙動をカスタマイズしよう!
「動いた!でも遅い…」「よく壁に引っかかる…」
そんな時は、Humanoid
のプロパティを調整することで、NPCの挙動を自由にカスタマイズできます。
Humanoid
を選択して、以下のプロパティを色々いじってみましょう。
プロパティ | 説明 | 設定例 |
---|---|---|
WalkSpeed |
移動速度です。プレイヤーのデフォルトは16なので、それより速くしないと追いつけません。 | 30 |
JumpPower |
ジャンプ力です。これを上げると、より高い段差を乗り越えられるようになります。 | 70 |
HipHeight |
腰の高さ(地面からの浮き具合)。少し上げると、小さな段差に引っかかりにくくなります。 |
0.5 (今回設定した値) |
MaxSlopeAngle |
登れる坂の最大角度。急な坂を登らせたい場合に調整します。 |
89 (デフォルト) |
コラム:「足がない」のに、なぜ動けるのか?
不思議に思いませんでしたか?今回使ったのは頭だけのモデルです。足はありません。
それでも動けるのは、前述の通り RobloxのHumanoid
はHumanoidRootPart
という中心パーツだけを動かす仕組み だからです。
手や足は、実はHumanoidRootPart
に付随する「飾り」でしかなく、移動能力そのものには影響しません。だから、どんな形のモデルでもHumanoid
とHumanoidRootPart
さえあれば、キャラクターとして動かすことができるのです。面白いですよね!
まとめ
今回は、自作のオリジナルモデルを使って、プレイヤーを追いかけるNPCを作成しました。
Humanoid
とHumanoidRootPart
がNPCの核となる- 追跡スクリプトで知能を与える
Anchored
を外すのが最重要ポイントHumanoid
のプロパティ調整で動きをカスタマイズできる
この基本をマスターすれば、敵キャラクターを作ったり、街を歩く住人を作ったりと、あなたのゲームの世界がさらに活き活きとしてくるはずです。
ぜひ、あなたのオリジナルキャラクターをたくさん動かしてみてください!
参考
普通に人型のNPCを置くだけならこれでできた
Discussion