【问题标题】:how do I check if a vector3 value is in a region3 value in Roblox Studio?如何在 Roblox Studio 中检查 vector3 值是否在 region3 值中?
【发布时间】:2021-10-05 15:39:57
【问题描述】:

我正在制作一个带有建筑系统的游戏。我试图通过在一个人的帐篷周围创建一个区域来为我的游戏添加土地所有权。问题是我不知道如何检查另一个玩家是否在另一个玩家的土地上放置了一些东西。有人回答吗?

【问题讨论】:

    标签: roblox


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 2021-11-06
      • 2019-12-21
      • 2021-12-12
      • 2020-05-12
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      相关资源
      最近更新 更多