🎉

【Roblox開発】Raycastが当たったPartの色を変えてみる

2024/08/05に公開

はじめに

今回はRaycastを利用して当たったオブジェクトに対して何か操作をする方法を共有します。

公式Reference

https://create.roblox.com/docs/workspace/raycasting

実装

オブジェクト配置

Partを二つ配置します。
今回はFirstPartからSecondPartに対してRayを出すようにします。

コード

local firstPart = workspace.FirstPart
local secondPart = workspace.SecondPart

while true do
    local direction = secondPart.Position - firstPart.Position

    local raycastResult = workspace:Raycast(firstPart.Position, direction)

    if raycastResult then
        local distance = raycastResult.Distance
        local color = Color3.new(1 - distance / 100, 0, 0)
		raycastResult.Instance.Color = color
		print("Distance : "..distance)
    else
        warn("No raycast result!")
    end

    task.wait(1)
end

workspace:Raycast(firstPart.Position, direction)でRayを出す原点と方向を指定しRayを出します。

raycastResultに当たったオブジェクトの情報が格納されます。

今回は当たったオブジェクトとRayの原点からの距離に応じてColorのRed成分を変更し当たったオブジェクトの色を変更しています。

RayCastに反応しないオブジェクトを設定する

RayをさえぎるPartを配置します。

local firstPart = workspace.FirstPart
local secondPart = workspace.SecondPart

while true do
    local direction = secondPart.Position - firstPart.Position

    local params = RaycastParams.new()
    params.FilterType = Enum.RaycastFilterType.Exclude
    params.FilterDescendantsInstances = {workspace.Part}

    local raycastResult = workspace:Raycast(firstPart.Position, direction, params)

    if raycastResult then
        local distance = raycastResult.Distance
        local color = Color3.new(1 - distance / 100, 0, 0)
		raycastResult.Instance.Color = color
		print("Distance : "..distance)
    else
        warn("No raycast result!")
    end

    task.wait(1)
end

以下の部分でRayに反応させないPartを指定しRaycast関数の引数にその設定情報を入れます。

    params.FilterType = Enum.RaycastFilterType.Exclude
    params.FilterDescendantsInstances = {workspace.Part}

実行

https://youtu.be/Sz7OcoUocJw

Landelテックブログ

Discussion