http://docs.unity3d.com/ScriptReference/Physics.SphereCast.html 我认为它基本上是光线投射,但几乎是所有方向。
此实例中的光线将如下创建:
Ray.new(Vector3.new(x,y,z) -- origin
Vector3.new(x,y,z)) -- direction
澄清:我正在roblox上创造一个持续旋转360度的迪斯科球。每次球旋转大约一度左右时,它几乎向所有方向发射光线。这些光线使用FindPartOnRay(光线)记录任何接触点的位置。从那里开始,我对FindPartOnRay(ray)的位置进行了说明。
答案 0 :(得分:0)
我可能会开始按照以下方式实现它:
function spherecast(radius, centre, objects)
local hits = {}
for i, obj in pairs(objects) do
local d = radius + obj.size
local dx = obj.x - centre.x
local dy = obj.y - centre.y
local dz = obj.z - centre.z
local sqrdist = dx * dx + dy * dy + dz * dz
if sqrdist <= d * d then
table.insert(hits, obj)
end
end
return hits
end
我知道您可能想要了解有关碰撞的更多信息,但作为第一轮,这将非常快。 obj.size
是最大尺寸(宽度,高度,深度)。
答案 1 :(得分:0)
我的方法如下:
有一个迪斯科球和光源的固定点,它会将光线发送到球上,应该很容易得到每个射线在球表面上的当前角度。在球表面上的光线的每个击中点处,您以倒角(必须从击球点处的迪斯科球表面的法线取出)向您的房间发送另一条射线。在那里,反射光的这些光线照射到房间里的某些东西,你可以看到发光点。
您可以将光栅用于来自虚拟光源的所有这些直接光线,然后转到迪斯科球。在这种情况下,您只使用Physics.Raycast。
为了模拟球的旋转,您可以将这些光线连续缓慢地移动到一侧。然后你应该在你的房间里有移动点。迪斯科!