ロブロックススタジオの参考になるURL
メタルギアのスネークみたいにダンボールに隠れて移動する
動作イメージ
1. プレイヤーが “B” キーを押すと ダンボールを装着
2. プレイヤーの 移動速度が遅くなる
3. 敵の AI はダンボールをかぶったプレイヤーを見逃す
4. “B” キーを押すと ダンボールを外す
使用する段ボール
段ボールの配置する場所
ReplicatedStorage/
の中に移動させます
段ボールのモデルの名前をBoxModel
に変更しました
BoxModelにPrimaryPartを設定
段ボールのパーツの設定変更
スクリプトの配置場所
StarterPlayer/StarterPlayerScripts/
にLocalScript
を作成
上手くいった段ボール被るScript
LocalScript
local boxTemplate = game.ReplicatedStorage:FindFirstChild("BoxModel")
if not boxTemplate then
warn("ReplicatedStorage に BoxModel が存在しません!")
return
else
print("BoxModel が見つかりました:", boxTemplate)
end
local player = game.Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
local humanoid = char:FindFirstChildOfClass("Humanoid")
local uis = game:GetService("UserInputService")
-- キャラクターの Head の存在確認
local head = char:FindFirstChild("Head")
if not head then
warn("キャラクターに Head がありません!")
return
end
-- ダンボール(Box)の装着・解除関数
local function toggleBox()
local existingBox = char:FindFirstChild("Box")
if existingBox then
-- 既にダンボールが装着されている場合は外す
existingBox:Destroy()
humanoid.WalkSpeed = 16 -- 通常速度に戻す
print("Box を解除しました。WalkSpeed を 16 に戻しました。")
else
-- ダンボールを作成してキャラクターに装着
local box = boxTemplate:Clone()
box.Parent = char
box.Name = "Box" -- キャラクター内の識別用に名前を変更
-- **BasePart (Part or MeshPart) を検索して PrimaryPart に設定する**
local primaryPart = nil
for _, child in ipairs(box:GetDescendants()) do
if child:IsA("BasePart") then
primaryPart = child
break
end
end
if not primaryPart then
warn("BoxModel に BasePart が見つかりません。")
return
end
box.PrimaryPart = primaryPart -- モデルの PrimaryPart を設定
primaryPart.Anchored = false -- 移動できるようにする
print("PrimaryPart が設定されました: " .. primaryPart.Name)
-- **ボックスの位置と回転を設定 (180度 + さらに180度回転)**
local newCFrame = head.CFrame * CFrame.new(0, 1.5, 0) * CFrame.Angles(0, math.rad(180), 0)
newCFrame = newCFrame * CFrame.Angles(0, math.rad(180), 0) -- 追加で180度回転させる
box:SetPrimaryPartCFrame(newCFrame)
print("ダンボールの CFrame が設定されました。")
-- **WeldConstraint を作成してキャラクターに追従させる**
local weld = Instance.new("WeldConstraint")
weld.Part0 = primaryPart -- Model の PrimaryPart を設定する
weld.Part1 = head -- プレイヤーの Head に追従
weld.Parent = primaryPart -- WeldConstraint は PrimaryPart に設定する
-- 移動速度を低下(ステルス効果)
humanoid.WalkSpeed = 8
print("Box を装着しました。WalkSpeed を 8 に低下しました。")
end
end
-- "B" キー入力で toggleBox 関数を実行
uis.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode == Enum.KeyCode.B then
print("B キーが押されました。")
toggleBox()
end
end)
さらに改良したもの
レインボーフレンズのblueに視認させないようにしたもの
https://qiita.com/studyhiminato1107/items/5de4a209d765d050c37f
失敗例
こちらは段ボールの底が下にきて頭に乗せてる感じになりました
何か別のことに使えるかも
LocalScript
local boxTemplate = game.ReplicatedStorage:FindFirstChild("BoxModel")
if not boxTemplate then
warn("ReplicatedStorage に BoxModel が存在しません!")
return
else
print("BoxModel が見つかりました:", boxTemplate)
end
local player = game.Players.LocalPlayer
local char = player.Character or player.CharacterAdded:Wait()
local humanoid = char:FindFirstChildOfClass("Humanoid")
local uis = game:GetService("UserInputService")
-- キャラクターの Head の存在確認
local head = char:FindFirstChild("Head")
if not head then
warn("キャラクターに Head がありません!")
return
end
-- ダンボール(Box)の装着・解除関数
local function toggleBox()
local existingBox = char:FindFirstChild("Box")
if existingBox then
-- 既にダンボールが装着されている場合は外す
existingBox:Destroy()
humanoid.WalkSpeed = 16 -- 通常速度に戻す
print("Box を解除しました。WalkSpeed を 16 に戻しました。")
else
-- ダンボールを作成してキャラクターに装着
local box = boxTemplate:Clone()
box.Parent = char
box.Name = "Box" -- キャラクター内の識別用に名前を変更
-- **Part3 を PrimaryPart に設定する(底のパーツ)**
local primaryPart = box:FindFirstChild("Part3")
if not primaryPart then
warn("BoxModel 内に Part3 が見つかりません。")
return
end
box.PrimaryPart = primaryPart
primaryPart.Anchored = false -- 移動できるようにする
print("PrimaryPart が設定されました: " .. primaryPart.Name)
-- **高さ調整用のオフセット値(上に移動する)**
local heightOffset = 0.05 -- この値を調整して高さを変える
-- **ボックスの位置と回転を設定 (180度回転)**
local newCFrame = head.CFrame * CFrame.new(0, 1.5 + heightOffset, 0) * CFrame.Angles(math.rad(180), 0, 0)
box:SetPrimaryPartCFrame(newCFrame)
print("ダンボールの CFrame が設定されました。")
-- **WeldConstraint を作成してキャラクターに追従させる**
local weld = Instance.new("WeldConstraint")
weld.Part0 = primaryPart -- Model の PrimaryPart を設定する
weld.Part1 = head -- プレイヤーの Head に追従
weld.Parent = primaryPart -- WeldConstraint は PrimaryPart に設定する
-- 移動速度を低下(ステルス効果)
humanoid.WalkSpeed = 8
print("Box を装着しました。WalkSpeed を 8 に低下しました。")
end
end
-- "B" キー入力で toggleBox 関数を実行
uis.InputBegan:Connect(function(input, gameProcessed)
if gameProcessed then return end
if input.KeyCode == Enum.KeyCode.B then
print("B キーが押されました。")
toggleBox()
end
end)