2014-11-06 57 views
0

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(ray)记录任何接触点的位置。从那里我将阐明我从FindPartOnRay(ray)获得的位置。

回答

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是最大尺寸(宽度,高度,深度)。

+0

更好地使用本地命中= {...} – lhf 2014-11-06 10:54:26

+0

我不完全确定这个函数是做什么的。我会告诉你我在做什么,然后也许你可以告诉我如何使用这个功能来完成我的目标,或者推荐我以另一种方式来完成目标。我正在不断旋转360度的roblox上创建迪斯科舞会。每当球旋转大约一度左右时,它就会向几乎所有方向发射射线。这些光线使用FindPartOnRay(ray)记录任何障碍物的位置。从那里我将阐明我从FindPartOnRay(ray)获得的位置。 – Andrew 2014-11-07 02:58:20

0

我的做法是以下几点:

拥有一个迪斯科球和一个固定的点光的光源,将发送射线球,应该很容易得到每一项的当前角度射线在球表面上。在球表面光线的每一个点上,你都会发出另一条反射角度的光线(必须从击球点的迪斯科球表面的法线上)进入你的房间。在那里,这些反射光线照射到房间里,你可以看到发光点。

对于来自虚拟光源的所有这些直射光线,您可以使用光栅进入迪斯科球。在这种情况下,你只能使用Physics.Raycast。

要模拟球的旋转,您可以不断地将这些射线缓慢移动到一侧。你应该在你的房间里移动点。迪斯科!

相关问题