Skip to main content
Version: bleeding-edge 🩸

Spuren & Raycasting

Wie man Traces & Raycasting benutzt, um Informationen der Welt in der Laufzeit zu sammeln.

Traces bieten eine Methode, um in deinen Karten herauszugreifen und Feedback zu erhalten, was in einem Liniensegment vorhanden ist. Sie verwenden sie, indem Sie zwei Endpunkte (a start and end location) und das Physiksystem ein Liniensegment zwischen diesen Punkten aufzeichnen. meldet alle Akteure, die er trifft. Leiterbahnen sind im Wesentlichen identisch mit Raycasts oder Raytraces in anderen Softwarepaketen.

Das folgende Beispiel zeigt dir, wie du was bekommst und wohin der Spieler schaust.

Client/Index.lua
-- Traces at each 100ms
Timer.SetInterval(function()
-- Gets the middle of the screen
local viewport_2D_center = Client.GetViewportSize() / 2

-- Deprojects to get the 3D Location for the middle of the screen
local viewport_3D = Client.DeprojectScreenToWorld(viewport_2D_center)

-- Makes a trace with the 3D Location and it's direction multiplied by 5000
-- Meaning it will trace 5000 units in that direction
local trace_max_distance = 5000

local start_location = viewport_3D.Position
local end_location = viewport_3D.Position + viewport_3D.Direction * trace_max_distance

-- Last parameter as true means it will draw a Debug Line in the traced segment
local trace_result = Client.Trace(start_location, end_location, CollisionChannel.WorldStatic | CollisionChannel.PhysicsBody, false, true, false, {}, true)

-- If hit something draws a Debug Point at the location
if (trace_result.Success) then

-- Makes the point Red or Green if hit an Actor
local color = Color(1, 0, 0) -- Red

if (trace_result.Entity) then
color = Color(0, 1, 0) -- Green

-- Here you can check which actor you hit like
-- if (trace_result.Entity:GetType() == "Character") then ...
end

-- Zeichnet einen Debug-Punkt am Treffpunkt für 5 Sekunden mit der Größe 10
Client. rawDebugPoint(trace_result.Location, Farbe, 5, 10)
Ende
Ende, 100)
tip

As you could see, we can pass bit-wise operators to Trace for more than one CollisionChannel at once! Benutzen Sie | zwischen den CollisionChannels , um dies zu erreichen.