首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Roblox Studio中使用新的raycast?

如何在Roblox Studio中使用新的raycast?
EN

Stack Overflow用户
提问于 2022-09-30 03:32:04
回答 1查看 520关注 0票数 0

我试图学习如何在Roblox工作室中使用Raycast系统,我在Roblox studio中没有足够的经验来了解这里发生了什么,或者更确切地说,我将如何更改或更新这一行代码,因为这是不可取的。

代码语言:javascript
运行
复制
local function castRay ()
    local origin = firePoint.Position
    local direction = (mouse.Hit.p - firePoint.Position).Unit
    
    direction = direction * gunSettings.range

    local ray = Ray.new(origin, direction)
    local hit, pos = workspace:FindPartOnRayWithIgnoreList(ray, ignoreList)

    replicatedStorage.Replicate:FireServer(tool, origin)
    
    local visual = Instance.new("Part")
    local length = (pos - origin).Magnitude

特别是在本地命中,pos,这现在被废弃了,在roblox工作室,以及本地射线,现在我确实研究了这类代码可以使用,而不是下面两个我刚才提到的。

代码语言:javascript
运行
复制
    local raycastParams = RaycastParams.new()
    raycastParams.FilterType = Enum.RaycastFilterType.Blacklist

但是,下面的行(如length )需要pos变量,因此我不知道如何才能继续前进。所以现在没有错误,但是我想要在这个函数中实现新的射线广播系统,我有点困在怎么做了,下面是函数的完整代码:

代码语言:javascript
运行
复制
    local function castRay ()
        local origin = firePoint.Position
        local direction = (mouse.Hit.p - firePoint.Position).Unit
        
        direction = direction * gunSettings.range
    
        local ray = Ray.new(origin, direction)
        local hit, pos = workspace:FindPartOnRayWithIgnoreList(ray, ignoreList)
    
        replicatedStorage.Replicate:FireServer(tool, origin)
        
        local visual = Instance.new("Part")
        local length = (pos - origin).Magnitude
        visual.Anchored = true
        visual.CanCollide = false
        visual.Material = Enum.Material.Neon
        visual.Color = gunSettings.rayColor
        visual.Size = Vector3.new(gunSettings.raySize.X, gunSettings.raySize.Y, length)
        visual.CFrame = CFrame.new(origin, pos)*CFrame.new(0,0,-length/2)
        visual.Parent = workspace.Effects
        debris:AddItem(visual, gunSettings.debrisTime)
        
        return hit, pos, direction, origin
    end
EN

Stack Overflow用户

回答已采纳

发布于 2022-09-30 15:20:09

如果您查看WorldRoot:Raycast的docs,您将看到一个关于如何使用新的raycast函数的代码示例。

新的API只是对数据进行了稍微不同的打包。与其将ignorelist传递给raycast函数,不如将其传递给RaycastParams对象。返回的所有数据都打包到一个RaycastResult对象中。

所以您可以简单地调整代码,如下所示:

代码语言:javascript
运行
复制
    local function castRay()
        local origin = firePoint.Position
        local direction = (mouse.Hit.p - firePoint.Position).Unit * gunSettings.range
    
        local raycastParams = RaycastParams.new()
        raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
        raycastParams.FilterDescendantsInstances = ignoreList

        local raycastResult = workspace:Raycast(origin, direction, raycastParams)
        local hit = raycastResult.Instance
        local pos = raycastResult.Position

您的代码的其余部分应该像以前一样工作。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73903736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档