Line 1: | Line 1: | ||
The SPhysics class allows you to interact with the physics scene. See also [[Scripting/SRigidbody]]. | The SPhysics class allows you to interact with the physics scene. See also [[Scripting/SRigidbody]]. | ||
+ | |||
==Members== | ==Members== | ||
− | {{ScriptFunction|SPhysicsHit|RayCast[]|(SVector origin, SVector normal, float distance);|Raycasts from origin along normal, distance meters - and returns the list of collided objects in distance order (closest first)}} | + | {{ScriptFunction|SPhysicsHit|RayCast[]|(SVector origin, SVector normal, float distance);|Raycasts from origin along normal, distance meters - and returns the list of collided objects in distance order (closest first)|5= |
− | {{ScriptFunction|SPhysicsHit|SphereCast[]|(SVector origin, float radius, float distance);|Sweeps from origin in a spherical ray 'radius' wide, and returns the list of collided objects}} | + | local trans=Space.Host.ExecutingObject<br> |
− | {{ScriptFunction|SPhysicsHit|CapsuleCast[]|(SVector origin, SVector end, float radius, float distance);|Sweeps a capsule from origin to end, radius wide and returns the list of collided objects}} | + | function Raycast()<br> |
− | {{ScriptFunction|SPhysicsHit|BoxCast[]|(SVector origin, SVector halfExtents, SVector direction, SQuaternion orientation, float distance);|Sweeps a box defined by origin+halfExtents along directiojn, distance meters with a orientation matching orientation - and returns the collisions in distance order.}} | + | local rays = Space.Physics.RayCast(trans.WorldPosition,trans.Forward,50)<br> |
+ | if(rays~=nil and #rays>0) then<br> | ||
+ | for i=0,#rays - 1 do<br> | ||
+ | Space.Log(rays[i].Object.Name.." i = "..i)<br> | ||
+ | end<br> | ||
+ | end<br> | ||
+ | end<br> | ||
+ | trans.OnUpdate(Raycast)<br> | ||
+ | ''Raycasts from origin in direction normal.'' | ||
+ | }} | ||
+ | |||
+ | {{ScriptFunction|SPhysicsHit|RayCastSingle|(SVector origin, SVector normal, float distance);|Raycasts from origin along normal, distance meters - and returns the list of collided objects in distance order (closest first)|5= | ||
+ | local trans=Space.Host.ExecutingObject<br> | ||
+ | function RaycastSingle()<br> | ||
+ | local ray=Space.Physics.RayCastSingle(trans.WorldPosition,trans.Forward,50)<br> | ||
+ | if(ray~=nil and ray.ContainsHit==true) then<br> | ||
+ | Space.Log(ray.Object.Name) | ||
+ | end<br> | ||
+ | end<br> | ||
+ | trans.OnUpdate(RaycastSingle)<br> | ||
+ | ''Returns single raycast hit from origin in direction normal.'' | ||
+ | }} | ||
+ | |||
+ | {{ScriptFunction|SPhysicsHit|SphereCast[]|(SVector origin, float radius, float distance);|Sweeps from origin in a spherical ray 'radius' wide, and returns the list of collided objects|5= | ||
+ | local trans=Space.Host.ExecutingObject<br> | ||
+ | function SphereRaycast()<br> | ||
+ | local center=trans.WorldPosition + Vector.New(0.5,0.5,0.5)<br> | ||
+ | local rays=Space.Physics.SphereCast(center,10,10,trans.Forward)<br> | ||
+ | if rays~=nil and #rays>0 then<br> | ||
+ | for i=0,#rays - 1 do<br> | ||
+ | Space.Log(rays[i].Object.Name.." i = "..i)<br> | ||
+ | end<br> | ||
+ | end<br> | ||
+ | end<br> | ||
+ | trans.OnUpdate(SphereRaycast)<br> | ||
+ | }} | ||
+ | |||
+ | {{ScriptFunction|SPhysicsHit|CapsuleCast[]|(SVector origin, SVector end, float radius, float distance);|Sweeps a capsule from origin to end, radius wide and returns the list of collided objects.|5= | ||
+ | local trans=Space.Host.ExecutingObject<br> | ||
+ | function CapsuleCast()<br> | ||
+ | local startp=trans.WorldPosition<br> | ||
+ | local endp=startp+trans.Up*10<br> | ||
+ | local rays=Space.Physics.CapsuleCast(startp,endp,1,10,trans.Up)<br> | ||
+ | if rays~=nil and #rays>0 then<br> | ||
+ | for i=0,#rays - 1 do<br> | ||
+ | Space.Log(rays[i].Object.Name.." i = "..i)<br> | ||
+ | end<br> | ||
+ | end<br> | ||
+ | end<br> | ||
+ | trans.OnUpdate(CapsuleCast) | ||
+ | }} | ||
+ | |||
+ | {{ScriptFunction|SPhysicsHit|BoxCast[]|(SVector origin, SVector halfExtents, SVector direction, SQuaternion orientation, float distance);|Sweeps a box defined by origin+halfExtents along directiojn, distance meters with a orientation matching orientation - and returns the collisions in distance order. | ||
+ | |5=local trans=Space.Host.ExecutingObject<br> | ||
+ | function BoxCast()<br> | ||
+ | local center=trans.WorldPosition + Vector.New(0.5,0.5,0.5)<br> | ||
+ | local endp=local extents=Vector.new(2,2,2)<br> | ||
+ | local rays=Space.Physics.BoxCast(center,extents,trans.Forward,Quaternion.Identity,2)<br> | ||
+ | if rays~=nil and #rays>0 then<br> | ||
+ | for i=0,#rays - 1 do<br> | ||
+ | Space.Log(rays[i].Object.Name.." i = "..i)<br> | ||
+ | end<br> | ||
+ | end<br> | ||
+ | end<br> | ||
+ | trans.OnUpdate(BoxCast) | ||
+ | }} | ||
+ | |||
+ | |||
{{Scripting Navbox}} | {{Scripting Navbox}} |
The SPhysics class allows you to interact with the physics scene. See also Scripting/SRigidbody.
Raycasts from origin along normal, distance meters - and returns the list of collided objects in distance order (closest first)
function Raycast()
local rays = Space.Physics.RayCast(trans.WorldPosition,trans.Forward,50)
if(rays~=nil and #rays>0) then
for i=0,#rays - 1 do
Space.Log(rays[i].Object.Name.." i = "..i)
end
end
end
trans.OnUpdate(Raycast)
Raycasts from origin along normal, distance meters - and returns the list of collided objects in distance order (closest first)
function RaycastSingle()
local ray=Space.Physics.RayCastSingle(trans.WorldPosition,trans.Forward,50)
if(ray~=nil and ray.ContainsHit==true) then
Space.Log(ray.Object.Name)
end
end
trans.OnUpdate(RaycastSingle)
Sweeps from origin in a spherical ray 'radius' wide, and returns the list of collided objects
function SphereRaycast()
local center=trans.WorldPosition + Vector.New(0.5,0.5,0.5)
local rays=Space.Physics.SphereCast(center,10,10,trans.Forward)
if rays~=nil and #rays>0 then
for i=0,#rays - 1 do
Space.Log(rays[i].Object.Name.." i = "..i)
end
end
end
Sweeps a capsule from origin to end, radius wide and returns the list of collided objects.
function CapsuleCast()
local startp=trans.WorldPosition
local endp=startp+trans.Up*10
local rays=Space.Physics.CapsuleCast(startp,endp,1,10,trans.Up)
if rays~=nil and #rays>0 then
for i=0,#rays - 1 do
Space.Log(rays[i].Object.Name.." i = "..i)
end
end
end
Sweeps a box defined by origin+halfExtents along directiojn, distance meters with a orientation matching orientation - and returns the collisions in distance order.
function BoxCast()
local center=trans.WorldPosition + Vector.New(0.5,0.5,0.5)
local endp=local extents=Vector.new(2,2,2)
local rays=Space.Physics.BoxCast(center,extents,trans.Forward,Quaternion.Identity,2)
if rays~=nil and #rays>0 then
for i=0,#rays - 1 do
Space.Log(rays[i].Object.Name.." i = "..i)
end
end
end
|