【问题标题】:How would I go about making my own spherecast function?我将如何制作自己的 spherecast 功能?
【发布时间】:2015-01-02 11:16:25
【问题描述】:

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

【问题讨论】:

    标签: lua unity3d raycasting roblox


    【解决方案1】:

    我可能会开始按照以下方式实现它:

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

    【讨论】:

    • 我不完全确定这个函数的作用。我会告诉你我到底在做什么,然后也许你可以告诉我如何使用这个功能来完成我的目标,或者推荐我另一种方法。我正在 roblox 上创建一个持续旋转 360 度的迪斯科球。每当球旋转大约一度左右时,它就会向几乎所有方向发出光线。这些射线使用 FindPartOnRay(ray) 记录任何障碍物的位置。从那里我在从 FindPartOnRay(ray) 获得的位置上放一个灯。
    【解决方案2】:

    我的方法如下:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 2015-07-01
      • 1970-01-01
      相关资源
      最近更新 更多