Garry's Mod Wiki

Revision Difference

util.TraceLine#552467

<function name="TraceLine" parent="util" type="libraryfunc"> <description> Performs a trace with the given trace data. <note>Clientside entities will not be hit by traces. When server side trace starts inside a solid, it will hit the most inner solid the beam start position is located in. Traces are triggered by change of boundary.</note> </description> <realm>Shared</realm> <args> <arg name="TraceData" type="table">The trace data to use. See <page>Structures/Trace</page></arg> </args> <rets> <ret name="" type="table">Trace result. See <page>Structures/TraceResult</page>. Can return `nil` if <page>game.GetWorld</page> or its <page text="physics object">Entity:GetPhysicsObject</page> is invalid. This will be the case for any traces done before <page>GM:InitPostEntity</page> is called.</ret> </rets> </function> <example> <description>Using a function callback as filter.</description> <code> local tr = util.TraceLine( { start = LocalPlayer():EyePos(), endpos = LocalPlayer():EyePos() + EyeAngles():Forward() * 10000, filter = function( ent ) return ( ent:GetClass() == "prop_physics" ) end } ) print( tr.HitPos, tr.Entity ) </code> <output>The trace will only hit prop_physics or world.</output> </example>⤶ ⤶ <example>⤶ <description>Visualizes a trace.</description>⤶ <code>⤶ local color_red = Color( 255, 0, 0 )⤶ local color_blu = Color( 0, 0, 255 )⤶ local mins, maxs = Vector( -24, -3, -2 ), Vector( 24, 3, 2 )⤶ ⤶ hook.Add( "PostDrawTranslucentRenderables", "trace_visualize", function()⤶ local eyePos = Entity( 1 ):EyePos() + Entity( 1 ):GetRight() * -5⤶ local eyeDir = Entity( 1 ):GetAimVector()⤶ ⤶ local tr = util.TraceLine( {⤶ start = eyePos,⤶ endpos = eyePos + eyeDir * 10000,⤶ filter = Entity( 1 )⤶ } )⤶ render.DrawLine( eyePos + LocalPlayer():GetRight() * -5, tr.HitPos, color_red, true )⤶ ⤶ -- Show that the traceline is a line, not a hull⤶ render.DrawWireframeBox( tr.HitPos, Angle( 0, 0, 0 ), mins, maxs, color_red, true )⤶ ⤶ eyePos = Entity( 1 ):EyePos() + Entity( 1 ):GetRight() * 5⤶ local tr2 = util.TraceHull( {⤶ start = eyePos,⤶ endpos = eyePos + eyeDir * 10000,⤶ filter = Entity( 1 ),⤶ mins = mins,⤶ maxs = maxs⤶ } )⤶ render.DrawLine( eyePos, tr2.HitPos, color_blu, true )⤶ render.DrawWireframeBox( tr2.HitPos, Angle( 0, 0, 0 ), mins, maxs, color_blu, true )⤶ end )⤶ </code>⤶ <output><upload src="70c/8dbdae6fcf05200.png" size="5612891" name="image.png" /></output>⤶ </example>