我试图学习如何在Roblox工作室中使用Raycast系统,我在Roblox studio中没有足够的经验来了解这里发生了什么,或者更确切地说,我将如何更改或更新这一行代码,因为这是不可取的。
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工作室,以及本地射线,现在我确实研究了这类代码可以使用,而不是下面两个我刚才提到的。
local raycastParams = RaycastParams.new()
raycastParams.FilterType = Enum.RaycastFilterType.Blacklist
但是,下面的行(如length )需要pos变量,因此我不知道如何才能继续前进。所以现在没有错误,但是我想要在这个函数中实现新的射线广播系统,我有点困在怎么做了,下面是函数的完整代码:
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
发布于 2022-09-30 15:20:09
如果您查看WorldRoot:Raycast的docs,您将看到一个关于如何使用新的raycast函数的代码示例。
新的API只是对数据进行了稍微不同的打包。与其将ignorelist
传递给raycast函数,不如将其传递给RaycastParams对象。返回的所有数据都打包到一个RaycastResult对象中。
所以您可以简单地调整代码,如下所示:
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
您的代码的其余部分应该像以前一样工作。
https://stackoverflow.com/questions/73903736
复制相似问题