🤖

【Roblox】自作モデルでプレイヤーを追いかけるNPCを作ろう!Humanoidの仕組み解説付き

に公開

はじめに

こんにちは!Robloxでゲーム開発を楽しんでいますか?

「自分で作ったオリジナルの3Dモデルを、キャラクターとして動かしてみたい!」と思ったことはありませんか?
この記事では、人型ではない自作モデル(今回は頭だけのモデルを例にします)をインポートし、プレイヤーを自動で追いかけるNPCにするための手順を、初心者にも分かりやすく解説します。

この記事を読めば、Humanoidの基本的な仕組みを理解し、どんな形のモデルでも動かせるようになります!

🤖 この記事でできること

  • 自作のオリジナルモデルをNPCとして動かす方法がわかる
  • プレイヤーを追跡するスクリプトが手に入る
  • NPCがうまく動かない時の調整方法(速度や段差対策)がわかる

NPCを動かすための「3つの心臓部」

いきなり手順に入る前に、NPCを動かすために絶対に必要となる3つの要素について理解しておきましょう。これを知っておくと、トラブルが起きた時に自分で解決しやすくなります。

  1. Humanoid
    モデルに「生命」を吹き込む魔法のようなオブジェクトです。体力、歩行速度、ジャンプ力などを管理し、MoveTo()という「移動しろ!」という命令を実行する能力を持っています。
  2. HumanoidRootPart
    モデルの「体の中心」となる基準パーツです。Humanoidはこのパーツの位置を基準にモデル全体を動かします。どんなに複雑なモデルでも、Robloxの世界ではこのパーツが「本体」として扱われます。
  3. WeldConstraint (溶接)
    モデルがバラバラにならないための「接着剤」です。HumanoidRootPart以外のパーツ(頭、手、足など)をこれですべて繋ぎ止め、一体となって動くようにします。

実装手順 (ステップ・バイ・ステップ)

それでは、実際に頭だけのオリジナルモデルを動かしていきましょう!

Step 1: モデルの準備と「中心」を決める

まずは、あなたが作ったモデルをRoblox Studioにインポートします。

  1. モデルをインポートし、中身を確認します。今回は、インポートしたモデルの中にあった地球のようなマテリアルのパーツをNPCの中心として使うことにします。
  2. その中心にしたいパーツの名前をHumanoidRootPartに変更します。これがNPCの魂になります。
  3. エクスプローラーでモデル(TestModel)を選択し、プロパティウィンドウでPrimaryPartを探します。クリックして、先ほど名前を変えたHumanoidRootPartを設定します。

モデルのPrimaryPartにHumanoidRootPartを設定する

Step 2: 「生命」を吹き込む

次に、モデルにHumanoidオブジェクトを追加して、生命を宿します。

  1. エクスプローラーでモデル(TestModel)を右クリックします。
  2. 「オブジェクトを挿入」 → 「Humanoid」を選択します。

これだけで、モデルはRobloxの世界で「キャラクター」として認識されるようになります。

Step 3: スクリプトで「知能」を与える

いよいよ、プレイヤーを追いかけるための頭脳(スクリプト)を組み込みます。

  1. モデル(TestModel)を右クリック → 「オブジェクトを挿入」 → 「Script」を選択します。
  2. 作成されたスクリプトに、以下のコードをそのまま貼り付けてください。
-- プレイヤー追跡スクリプト
-- このスクリプトを追跡させたいモデルの中に入れると、
-- 最も近いプレイヤーを追いかけ始めます。

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のHumanoidHumanoidRootPartという中心パーツだけを動かす仕組み だからです。

手や足は、実はHumanoidRootPartに付随する「飾り」でしかなく、移動能力そのものには影響しません。だから、どんな形のモデルでもHumanoidHumanoidRootPartさえあれば、キャラクターとして動かすことができるのです。面白いですよね!

まとめ

今回は、自作のオリジナルモデルを使って、プレイヤーを追いかけるNPCを作成しました。

  • HumanoidHumanoidRootPartがNPCの核となる
  • 追跡スクリプトで知能を与える
  • Anchoredを外すのが最重要ポイント
  • Humanoidのプロパティ調整で動きをカスタマイズできる

この基本をマスターすれば、敵キャラクターを作ったり、街を歩く住人を作ったりと、あなたのゲームの世界がさらに活き活きとしてくるはずです。

ぜひ、あなたのオリジナルキャラクターをたくさん動かしてみてください!

参考

普通に人型のNPCを置くだけならこれでできた
https://www.youtube.com/watch?v=-dnaNOtYJO4

Discussion