【发布时间】:2021-10-05 15:39:57
【问题描述】:
我正在制作一个带有建筑系统的游戏。我试图通过在一个人的帐篷周围创建一个区域来为我的游戏添加土地所有权。问题是我不知道如何检查另一个玩家是否在另一个玩家的土地上放置了一些东西。有人回答吗?
【问题讨论】:
标签: roblox
我正在制作一个带有建筑系统的游戏。我试图通过在一个人的帐篷周围创建一个区域来为我的游戏添加土地所有权。问题是我不知道如何检查另一个玩家是否在另一个玩家的土地上放置了一些东西。有人回答吗?
【问题讨论】:
标签: roblox
Vector3 本质上只是一个带有 X、Y 和 Z 分量的坐标。这里的假设是它的原点在 (0, 0, 0)。
Region3 是一个轴对齐的边界框,基于 Vector3 的最小坐标和 Vector3 的最大坐标构建。
如果Vector3的大小大于最小坐标且小于最大坐标,则可以认为它位于Region3内部。
由于 Region3 将区域的中心作为其 CFrame 属性,因此您可以使用其大小除以一半来计算 Region3 的范围,然后检查 Vector3 是否落在该区域内。
local function isVect3InRegion3(vector, region)
-- validate input
assert(typeof(vector) == "Vector3")
assert(typeof(region) == "Region3")
-- get the dimensions of the region
local regionCenter = region.CFrame.Position
local regionHalfSize = region.Size * 0.5
-- calculate the extents of the region
local lowerLeftCorner = regionCenter - regionHalfSize
local upperRightCorner = regionCenter + regionHalfSize
-- check if the vector is inside the extents
local isBeyondLeftCorner = (vector.X >= lowerLeftCorner.X) and
(vector.Y >= lowerLeftCorner.Y) and
(vector.Z >= lowerLeftCorner.Z)
local isBeforeRightCorner = (vector.X <= upperRightCorner.X) and
(vector.Y <= upperRightCorner.Y) and
(vector.Z <= upperRightCorner.Z)
return isBeyondLeftCorner and isBeforeRightCorner
-- NOTE : comparing individual values above is less expensive than
-- return vector.Magnitude >= lowerLeftCorner.Magnitude and
-- vector.Magnitude <= upperRightCorner.Magnitude
end
【讨论】: