roblox - 如何在 Roblox Studio 中检查 vector3 值是否在 region3 值中?
问题描述
我正在使用建筑系统制作游戏。我试图通过在一个人的帐篷周围创建一个区域来为我的游戏添加土地所有权。问题是我不知道如何检查另一个玩家是否在另一个玩家的土地上放置了一些东西。有人有答案吗?
解决方案
Vector3本质上只是一个带有 X、Y 和 Z 分量的坐标。这里的假设是它的原点在 (0, 0, 0)。
Region3是一个轴对齐的边界框,它是基于最小的 Vector3 坐标和最大的 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
推荐阅读
- python - 如何将系列的值(类型为字符串)更改为 int?
- php - 一维数值数组在 PHP 中转换为对象数组。如何通过索引访问对象数组的值
- c# - 有没有办法监视一个方法是否使用 Moq.NET 捕获了异常?
- activemq-artemis - 只有只读控制台权限的用户?
- windows - WinHttpSendRequest 失败,错误代码 87
- c - 尝试将值复制到指针 str 时获取 null
- swift - Swift Unit Test 如何使用私有设置器进行设置
- python - 如何使用数据框中的列在新数据框中创建行?
- android - 我刚刚将 Firebase 添加到我的 Unity 项目中,现在出现 Gradle Build Failed 错误
- python-3.x - 如何包含循环或乘以循环直到满足精度?