如何在Roblox Studio中替换旧射线系统为新Raycast系统?
替换Roblox旧射线API为新Raycast系统的实现
以下是更新后的完整函数代码,完全替代弃用的Ray.new和FindPartOnRayWithIgnoreList:
local function castRay () local origin = firePoint.Position local direction = (mouse.Hit.p - firePoint.Position).Unit * gunSettings.range -- 配置射线参数,替代原ignoreList local raycastParams = Instance.new("RaycastParams") raycastParams.FilterType = Enum.RaycastFilterType.Blacklist raycastParams.FilterDescendantsInstances = ignoreList raycastParams.IgnoreWater = true -- 可选,根据需求设置是否忽略水 -- 执行新射线检测 local result = workspace:Raycast(origin, direction, raycastParams) -- 计算命中点pos:命中则用结果位置,未命中则取射线最远点 local pos = result and result.Position or origin + direction local hit = result and result.Instance 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
关键变化说明
- 替换射线创建与检测逻辑:用
RaycastParams配置忽略列表,调用workspace:Raycast执行检测,返回的RaycastResult包含所有命中信息 - 处理pos变量:
- 当射线命中物体时,
result.Position就是命中点,对应旧代码的pos - 未命中时,直接计算射线的最远点
origin + direction(因为direction已经是单位向量乘了射程,和旧逻辑一致)
- 当射线命中物体时,
- 简化direction计算:把原代码中
direction = direction * gunSettings.range合并到一行,逻辑不变 - 可选配置:新增
IgnoreWater参数,可根据需求开启或关闭忽略水的检测
内容的提问来源于stack exchange,提问作者BananaBoater
相关产品推荐
相关产品推荐

