2014-11-06 56 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。

要模擬球的旋轉,您可以不斷地將這些射線緩慢移動到一側。你應該在你的房間裏移動點。迪斯科!

相關問題