RobloxStudioでRayを可視化|Robloxゲーム作成メモ

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です。

タイトルとURLをコピーしました