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) 获得的位置上放一个灯。

4

2 回答 2

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

于 2014-11-06T04:53:34.120 回答
0

我的方法如下:

有一个迪斯科球和一个固定的光源点,它将向球发送光线,应该很容易获得这些光线在球表面上的当前角度。在球表面上的每个光线命中点,您都会以倒角(必须从命中点处的迪斯科球表面的法线获取)发送另一条光线到您的房间。在那里,这些反射光的光线照射到房间里的东西上,你可以看到发光的点。

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

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

于 2015-09-29T12:06:12.933 回答