我将如何制作自己的投球功能?

时间:2014-11-06 03:20:20

标签: lua unity3d raycasting roblox

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)的位置进行了说明。

2 个答案:

答案 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。

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