RayValue

显示已弃用

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

RayValue 是一个旨在存储单一射线的对象。与 CFrameValue 类似,RayValue 中存储的射线无法在工作室的属性窗口内查看或编辑。相反,使用命令栏来获取和设置这些对象的值。例如,您可以使用如下代码在 Workspace 中创建一个名为 "Value" 的新 RayValue。它在 (0, 50, 0) 处创建一个射线,并朝着正-X 方向。

Instance.new("RayValue").Value = Ray.new(Vector3.new(0, 50, 0), Vector3.new(10, 0, 0))

由于在工作室中没有简单的方法来编辑射线,有时使用 CFrameValue 更好(可以通过部件或相机更改)。您可以使用 Ray.new(cf.p, cf.lookVector * dist) 从 CFrame 重新构建一条射线,其中 cf 是给定的 CFrame,dist 是您要构建的射线的长度。

像所有 "-Value" 对象一样,这个单一值存储在 Value 属性中。此(以及其他类似对象)的 Changed 事件将在对象中存储的新值被更改时触发,而不是表示正在更改属性的字符串。

代码示例

这个代码示例演示了如何构造一个射线,将射线存储在一个 RayValue 中,并使用射线检测在两个名为“PartA”和“PartB”的部件之间查找其他部件。

射线, RayValue 和射线检测

local partA = workspace.PartA
local partB = workspace.PartB
local origin = partA.Position
local direction = partB.Position - partA.Position
local ray = Ray.new(origin, direction)
local rayValue = Instance.new("RayValue")
rayValue.Value = ray
rayValue.Name = "PartA到PartB的射线"
rayValue.Parent = workspace
-- 使用射线检测查找 PartA 和 PartB 之间的任何部件
local part = workspace:FindPartOnRay(ray)
if part then
print("击中部件: " .. part:GetFullName())
else
-- 这应该永远不会发生,因为我们的射线从 PartA 开始
-- 并指向 PartB,因此我们应该始终击中 PartB
-- 或者其他某个部件。
print("没有击中任何部件!")
end

属性

Value

读取并联

存储的射线。

方法

活动

Changed

此事件在 RayValue.Value 属性被更改时触发。它将使用存储在参数对象中的新值运行,而不是表示正在更改属性的字符串。

此事件与其他更改事件一样,可以用于跟踪 RayValue 何时更改,以及跟踪它可能更改为的不同值。

对于类似对象,例如 NumberValueStringValue,根据最适合需求的对象类型,还存在等效的更改事件。

参数

value: Ray

更改后的值。


代码示例

以下示例假设所有引用的对象都存在,每当 RayValue 的值改变时,都会打印新的值。在以下示例中,它将打印 "{0, 0, 0}, {0.577350199, 0.577350199, 0.577350199}"

如何使用 RayValue.Changed

local value = Instance.new("RayValue")
value.Parent = workspace
value.Changed:Connect(function(NewValue)
print(NewValue)
end)
local start = Vector3.new(0, 0, 0)
local lookAt = Vector3.new(10, 10, 10)
local ray = Ray.new(start, (lookAt - start).Unit)
value.Value = ray