# util.TraceLine

- **Ortam:** İstemci, Sunucu
- **İngilizce aslı:** https://wiki.facepunch.com/gmod/util.TraceLine
- **Çeviri tarihi:** 2025-09-08

```lua
table util.TraceLine( table traceConfig )
```

## Açıklama

Girdiye dayalı olarak bir çizgi üzerinde sonsuz incelikte, görünmez bir ışın izlemesi (veya "trace") gerçekleştirir ve izleme çizgisinin neye çarptığı veya neyle kesiştiği hakkında bilgi içeren bir tablo döndürür.

İzlemeler, [katı](https://gmod.tr/wiki/Enums/SOLID), [sunucu taraflı](https://gmod.tr/wiki/States), [objelerin](https://gmod.tr/wiki/Entity) (oyun dünyası [dahil](https://gmod.tr/wiki/game.GetWorld)) fiziksel ağlarıyla kesişir, ancak [hitclientonly](https://gmod.tr/wiki/Structures/Trace#hitclientonly) `true` olarak ayarlanmadığı sürece yalnızca istemci taraflı objeleri algılayamaz.

İzlemenin ilk kesişimde durmamasını istiyorsanız [ents.FindAlongRay](https://gmod.tr/wiki/ents.FindAlongRay) fonksiyonuna bakın.
"Kutu" tipi bir izleme için [util.TraceHull](https://gmod.tr/wiki/util.TraceHull) fonksiyonuna bakın.

İzlemeler, fiziksel ağların iç ve dış yüzleri arasında ayrım yapmaz. Bu nedenle, bir izleme katı bir fiziksel ağ içinde başlarsa, fiziksel ağın iç yüzlerine çarpacak ve sonuç olarak beklenmedik değerler döndürebilecektir.

Hata ayıklama amacıyla izlemeleri gerçek zamanlı olarak görselleştirmek için `r_visualizetraces` komutunu `1` olarak ayarlayabilirsiniz (`sv_cheats` komutunun `1` olmasını gerektirir).

## Argümanlar

1. [table](https://gmod.tr/wiki/table) ([Trace yapısı](https://gmod.tr/wiki/Structures/Trace) ile) **traceConfig**: İzlemeyi yapılandıran verileri içeren bir tablo. Mevcut seçenekler için [Trace yapısı](https://gmod.tr/wiki/Structures/Trace) sayfasına bakın.

## Dönen Değerler

1. [table](https://gmod.tr/wiki/table) ([TraceResult yapısı](https://gmod.tr/wiki/Structures/TraceResult) ile): İzleme çizgisinin nereyle ve neyle kesiştiğini detaylandıran bir bilgi tablosu veya izleme [GM:InitPostEntity](https://gmod.tr/wiki/GM:InitPostEntity) kancasından önce yapılıyorsa `nil` döner. Tablonun formatı ve mevcut seçenekler için [TraceResult yapısı](https://gmod.tr/wiki/Structures/TraceResult) sayfasına bakın.

### Örnek

Çeşitli filtre yöntemlerinin örnek kullanımı.

```lua
-- Bu izleme, fonksiyon geri arama filtresi kullanarak SADECE araç olan objelere çarpacaktır
concommand.Add( "test_trace_vehicles", function( ply )
	local tr = util.TraceLine( {
		start = ply:GetShootPos(),
		endpos = ply:GetShootPos() + ply:GetAimVector() * 10000,
		filter = function( ent ) return ent:IsVehicle() end
	} )

	print( tr.HitPos, tr.Entity )
end )

-- Bu izleme, sınıf adı 'prop_physics' olan objelere ÇARPMAYACAKTIR.
concommand.Add( "test_trace_not_props", function( ply )
	local tr = util.TraceLine( {
		start = ply:GetShootPos(),
		endpos = ply:GetShootPos() + ply:GetAimVector() * 10000,
		filter = { "prop_physics", ply } -- Ayrıca izlemeyi yapan oyuncuya da çarpma
	} )

	print( tr.HitPos, tr.Entity )
end )

-- Bu izleme, SADECE sınıf adı 'prop_physics' olan objelere çarpacaktır.
concommand.Add( "test_trace_props", function( ply )
	local tr = util.TraceLine( {
		start = ply:GetShootPos(),
		endpos = ply:GetShootPos() + ply:GetAimVector() * 10000,
		filter = { "prop_physics" },
		whitelist = true
	} )

	print( tr.HitPos, tr.Entity )
end )
```

### Örnek

Bir izlemeyi görselleştirir.

```lua
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 )

	-- İzleme çizgisinin bir çizgi olduğunu, bir gövde (hull) olmadığını göster
	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 )
```

**Çıktı:**

![image.png](https://gmod.tr/api/uploads/wiki/2d7b25d41859319ede8a.png)

### Örnek

İstemcide çalıştırıldığında yalnızca istemci taraflı objelere çarpacak örnek kod.

```lua
if ( CLIENT ) then
	concommand.Add( "test_cl_trace", function( ply )
			local tr = util.TraceLine( {
				start = ply:GetShootPos(),
				endpos = ply:GetShootPos() + ply:GetAimVector() * 10000,
				mask = MASK_ALL, -- Bu, ölü NPC'lerin/oyuncuların ragdoll'larına çarpmak için gereklidir, çünkü onlar "moloz" olarak kabul edilir
				filter = ply, -- İzlemeyi yapan oyuncuya çarpma
				hitclientonly = true -- Sadece istemci taraflı objelere çarp
			} )

			-- İzleme sonuçlarını göster
			PrintTable( tr )

			-- "developer 1" etkinken, çarpma pozisyonunu çiz
			-- Zamanlayıcı gereklidir çünkü oyun duraklatıldığında (konsol açıkken olduğu gibi) debugoverlay çalışmaz
			timer.Simple( 0.0, function()
				debugoverlay.Cross( tr.HitPos, 16, 10 )
				debugoverlay.Text( tr.HitPos, "Hit: " .. tostring(tr.Entity), 10 )
			end )
	end )
end
```

- [GMod Wiki ana sayfası](https://gmod.tr/wiki)

---

[Tüm sunucular](https://gmod.tr/) · [GmodTR Launcher](https://gmod.tr/launcher) · [Rehber](https://gmod.tr/rehber) · [GMod Wiki](https://gmod.tr/wiki) · [GmodTR nedir?](https://gmod.tr/hakkinda) · [Sunucu ekle](https://gmod.tr/sunucu-ekle) · [Discord](https://discord.gg/gmodtr)

Kaynak: https://gmod.tr/wiki/util.TraceLine
