2014-11-06 3 views
0

http://docs.unity3d.com/ScriptReference/Physics.SphereCast.html Я бы предположил, что это в основном raycasting, но почти во всех направлениях.Как я могу сделать свою собственную функцию сферирования?

луч в данном случае будет создан следующим образом:

Ray.new(Vector3.new(x,y,z) -- origin 
Vector3.new(x,y,z))   -- direction 

Разъяснение: Я создаю диско шар на Roblox, который вращается на 360 градусов непрерывно. Каждый раз, когда шар вращается примерно в той или иной степени, он посылает лучи почти во всех направлениях. Эти лучи записывают положение любых точек соприкосновения с помощью FindPartOnRay (ray). Оттуда я освещаю позицию, которую я получил от FindPartOnRay (луч).

ответ

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

Лучшее использование 'local hits = {}' ... – lhf

+0

Я не совсем уверен, что делает эта функция. Я скажу вам, что именно я делаю, а потом, может быть, вы можете сказать мне, как использовать эту функцию для выполнения моей цели или рекомендовать мне другой способ сделать это. Я создаю диско-шар на roblox, который постоянно вращается на 360 градусов. Каждый раз, когда шар вращается примерно в той или иной степени, он посылает лучи почти во всех направлениях. Эти лучи записывают положение любых препятствий с помощью FindPartOnRay (луч). Оттуда я освещаю позицию, которую я получил от FindPartOnRay (луч). – Andrew

0

Мой подход был бы следующий:

Имея диско шар и неподвижную точку для источника света, который будет посылать лучи на мяч, он должен быть легко получить текущий угол каждого из них лучей на поверхности шаров. В каждую точку попадания светового луча на поверхность шаров вы посылаете другой луч в перевернутом угле (должен быть взят из нормали поверхности дискотеки в точке попадания) в вашу комнату. Там, где эти лучи отраженного света что-то попали в комнату, вы можете показать светящиеся пятна.

Вы можете использовать растр для всех этих прямых световых лучей от источника виртуального света, идущего на дискотечный шар. В этом случае вы используете только Physics.Raycast.

Чтобы имитировать вращение шара, вы можете непрерывно перемещать эти лучи медленно в одну сторону. Затем вы должны иметь движущиеся точки в своей комнате. Дискотека!