RobloxStudioで「Raycast」を可視化してより詳しく確認していきます。
はじめに
下記でRobloxStudioでraycastの基本を確認しました。今回はRayを見えるようにしたり、詳しく見ていきます。
上記記事の内容を作成した続きになります。
製作開始
Rayをループで実行
まずはLocalScriptの中身を下記に変更します。
local Workspace = game:GetService("Workspace")
local character = script.Parent
local hrp = character:WaitForChild("HumanoidRootPart")
while true do
local direction = hrp.CFrame.LookVector * 10
local raycastResult = Workspace:Raycast(hrp.Position,direction)
if raycastResult ~= nil then
raycastResult.Instance.Color = Color3.new(1, 1, 0)
end
task.wait(1)
end
光線をプレイヤーから出るように変更。ループでRayを発射して当たったオブジェクトの色を変更しています。
実行して下記の様にプレイヤー方向にあるパーツの色が変わればOKです。

Rayの可視化
次にRayを見えるようにしてみます。スクリプトの中身を下記に変更します。発射したRayをPartで0.1秒だけ可視化しています。
local Workspace = game:GetService("Workspace")
local player = game.Players.LocalPlayer
local character = script.Parent
local hrp = character:WaitForChild("HumanoidRootPart")
local function RayVisible(origin,direction)
local part = Instance.new("Part")
part.Parent = Workspace
part.CanCollide = false
part.CanQuery = false
part.Anchored = true
part.Size = Vector3.new(1,1,direction.magnitude)
part.CFrame = CFrame.new(origin + direction /2,origin)
part.BrickColor = BrickColor.Red()
return part
end
while true do
local direction = hrp.CFrame.LookVector * 10
local raycastResult = Workspace:Raycast(hrp.Position,direction)
if raycastResult ~= nil then
raycastResult.Instance.Color = Color3.new(1, 1, 0)
end
local part = RayVisible(hrp.Position,direction)
task.wait(0.1)
part:Destroy()
task.wait(1)
end
実行して下記の様に表示されたらOKです。

ボタンでRayを発射
次にボタンを押した時にRayが発射されるように変更します。「StarterGui」の配下に「ScreenGui」、「Frame」、「button」を追加します

スクリプトを下記に変更します。
local Workspace = game:GetService("Workspace")
local player = game.Players.LocalPlayer
local character = script.Parent
local hrp = character:WaitForChild("HumanoidRootPart")
local frame = player.PlayerGui.ScreenGui.Frame
local button = frame.button
local function RayVisible(origin,direction)
local part = Instance.new("Part")
part.Parent = Workspace
part.CanCollide = false
part.CanQuery = false
part.Anchored = true
part.Size = Vector3.new(1,1,direction.magnitude)
part.CFrame = CFrame.new(origin + direction /2,origin)
part.BrickColor = BrickColor.Red()
return part
end
local function ray()
local direction = hrp.CFrame.LookVector * 10
local raycastResult = Workspace:Raycast(hrp.Position,direction)
if raycastResult ~= nil then
raycastResult.Instance.Color = Color3.new(1, 1, 0)
end
local part = RayVisible(hrp.Position,direction)
task.wait(0.1)
part:Destroy()
end
button.MouseButton1Click:Connect(function()
ray()
end)
下記の様にボタンを押した時にRayが発射されたらOKです。

