UI sürükleme dedektörleri

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

UIDragDetector örneği, kaydırıcılar, dönerler ve daha fazlası gibi deneyimlerdeki 2D kullanıcı arayüzü öğeleriyle etkileşimi kolaylaştırır ve teşvik eder. Ana özellikler şunlardır:

  • Herhangi bir GuiObject örneğinin altına bir UIDragDetector yerleştirerek, tek bir kod satırı yazmadan tüm kullanıcı girdi yolları ile sürüklenebilir hale getirin.

  • DragStyle seçeneklerinden birkaçını seçin, nesnenin hareketlere yanıt verme şeklini ResponseStyle aracılığıyla tanımlayın ve isteğe bağlı olarak eksen, hareket sınırları veya sürükleme sınırları uygulayın.

  • Betikler, sürüklenen nesnelerin manipülasyonuna yanıt vererek ayarları ayarlamak gibi mantıksal yanıtlar sürükleyebilir.

  • UIDragDetectors, yalnızca Seç, Taşı, Ölçek, veya Döndür araçlarını veya belirli eklentileri veya Stüdyo'nun UI düzenleyici araçlarını kullanmıyorsanız Stüdyo'nun düzenleme ve oynatma modlarında çalışır.

UI öğelerini sürüklenebilir hale getirme

Herhangi bir GuiObject örneğini sürüklenebilir hale getirmek için, doğrudan bir UIDragDetector eklemeniz yeterlidir.

  1. Explorer penceresinde, GuiObject örneğinin üzerine gelin ve ⊕ butonuna tıklayın. Bağlam menüsü görüntülenir.

  2. Menüden bir UIDragDetector ekleyin.

  3. Varsayılan olarak, nesne artık LayerCollector arayüzünde sürüklenebilir olacaktır.

UI sürükleme dedektörlerini özelleştirme

Sürükleme stili

UIDragDetectors, imleç hareketini hareket önerilen 2D hareketi ve/veya döndürmeyi hesaplamak için haritalar. DragStyle özelliği aracılığıyla ihtiyaçlarınıza uygun farklı haritalamalardan seçim yapabilirsiniz. Örneğin, Enum.UIDragDetectorDragStyle.TranslatePlane, LayerCollector'ın 2D düzleminde çeviri üretirken, Enum.UIDragDetectorDragStyle.Rotate genellikle çeviri yerine bir döndürme üretir.

AyarAçıklama
TranslateLineDedektörün DragAxis boyunca 1D hareket.
TranslatePlaneLayerCollector düzleminde 2D hareket.
RotateVarsayılan olarak, dedektörün üst nesnesinin mutlak merkez pozisyonu etrafında döner. Eğer ReferenceUIInstance ayarlanmışsa, döndürme o örneğin mutlak merkez pozisyonu etrafında olur.
ScriptableSetDragStyleFunction() aracılığıyla sağlanan özel bir işlev aracılığıyla istenilen hareketi hesaplar.

Sürükleme yönü

Varsayılan olarak, 2D hareket ve ilgili DragStyle, ata nesne LayerCollector'ın alanına haritalanır. Ancak, farklı UI bileşenleri oluştururken ReferenceUIInstance veya DragAxis'ı değiştirmek isteyebilirsiniz.

AyarAçıklamaVarsayılan
ReferenceUIInstanceDedektörün referans alanı ve orijini olan bir GuiObject örneği. Bu referansı ayarlamak, DragUDim2, DragRotation gibi özellikleri ve DragAxis'ın davranışını etkiler.nil
DragAxisDragStyle Enum.UIDragDetectorDragStyle.TranslateLine olarak ayarlandığında, sürüklenen nesne için hareket eksenini tanımlayan bir Vector2 değeri. Eksen, UIDragDetector'ın yerel alanında tanımlanır, ancak ReferenceUIInstance tanımlanmışsa, o örneğin yerel alanında tanımlanır.(1, 0)

Hareket yanıtı

UIDragDetector.ResponseStyle özelliği, bir nesnenin pozisyon değerinin önerilen hareketle nasıl değiştirileceğini belirtir. Özel yanıt stilleri, dedektörün üstündeki nesne önerilen hareketi gerçekleştirmeden UIDragDetector.DragUDim2 ve UIDragDetector.DragRotation değerlerini istediğiniz gibi kullanmanıza olanak tanır.

AyarAçıklama
OffsetDedektörün üst nesnesinin GuiObject.Position değerinin Offset değerleriyle hareket ettirir. Bu, varsayılan ayardır.
ScaleDedektörün üst nesnesinin GuiObject.Position değerinin Scale değerleriyle hareket ettirir.
CustomOffsetUI öğesi hiç hareket etmez, ancak dedektörün DragUDim2 değerlerinin Offset değerleri yine de güncellenir ve dedektörün olayları hala tetiklenir, böylece sürükleme manipülasyonuna istediğiniz gibi yanıt verebilirsiniz.
CustomScaleUI öğesi hiç hareket etmez, ancak dedektörün DragUDim2 değerlerinin Scale değerleri yine de güncellenir ve dedektörün olayları hala tetiklenir, böylece sürükleme manipülasyonuna istediğiniz gibi yanıt verebilirsiniz.

Çevirme & döndürme sınırları

Varsayılan olarak, DragStyle'ın doğasında var olan kısıtlamalar haricinde, 2D hareket için hiçbir sınır yoktur. Minimum ve maksimum çevirme ve döndürme sınırları istenirse aşağıdaki özellikler aracılığıyla ilan edilebilir. Ayrıca, sürüklenen nesnenin belirtilen bir GuiObject içinde nasıl sınırlı kalacağı tanımlanabilir, örneğin bir Frame gibi.

ÖzelliklerAçıklamaVarsayılan
MinDragTranslation
MaxDragTranslation
Her boyut için sürükleme çevirme sınırları, bir UDim2 değeri ile tanımlanır. MaxDragTranslation, MinDragTranslation'dan daha büyükse, çevirme o aralık içinde sınırlı olacaktır.{0, 0}, {0, 0}
MinDragAngle
MaxDragAngle
Yalnızca DragStyle Enum.UIDragDetectorDragStyle.Rotate olarak ayarlandığında geçerlidir veya SetDragStyleFunction() veya AddConstraintFunction() aracılığıyla ayarlanan işlev bir döndürme değeri tanımlıyorsa. Eğer MaxDragAngle, MinDragAngle'dan daha büyükse, döndürme o aralık içinde sınırlı olacaktır.0
BoundingBehaviorDedektörün BoundingUI ayarlandığında sınır davranışını belirler. Bunu EntireObject olarak ayarlamak, sürüklenen UI'nin tamamını BoundingUI içinde sınırlar, HitPoint olarak ayarlamak ise sürüklenen UI'yi yalnızca belirli bir vurma/kapma noktası ve çevirme/döndürme sonrası pozisyonuyla sınırlandırır. Kolaylık açısından, Automatic varsayılanı, BoundingUI içinde tamamen yer alan bir UI nesnesi için EntireObject davranışını taklit eder, aksi takdirde BoundingUI dışında kısmen yer alan bir UI nesnesi için HitPoint olur.Automatic

Hız ayarlamaları

SelectionModeDragSpeed ve SelectionModeRotateSpeed aracılığıyla, bir dedektör için maksimum sürükleme/döndürme hızlarını ince ayar yapabilirsiniz. Ayrıca, UIDragSpeedAxisMapping aracılığıyla dedektörün SelectionModeDragSpeed değerlerine dayalı olarak X/Y boyut sürükleme hızlarını ince ayar yapabilirsiniz.

ÖzellikAçıklama
SelectionModeDragSpeedDedektörün ait olduğu ilk ata ScreenGui veya SurfaceGui'nun Scale ve Offset kombinasyonu olarak çeviri için maksimum sürükleme hızını tanımlar.
SelectionModeRotateSpeedUIDragDetector'in dönebildiği maksimum açıyı tanımlar.
UIDragSpeedAxisMappingDedektörün SelectionModeDragSpeed'e dayalı olarak X/Y boyut sürükleme hızlarını belirler. Varsayılan değer XY'dir, yani X ve Y eksenleri hızlarının her biri X ve Y Scale/Offset değerlerine dayanır.

Alternatifler XX ve YYdir, yani X ve Y eksenleri hızlarının her biri Scale için sırasıyla X (XX) veya Y (YY) eksenine dayandırılır, ancak Offset değerleri hala kendi eksenlerine uygulanır. Örneğin, ilk ata ScreenGui 800×600 boyutlarında ve SelectionModeDragSpeed {0.1, 10}, {0.1, 20} ise, XX ayarı, 80+10/80+20 X/Y sürükleme hızına yol açarken, YY ayarı 60+10/60+20 sonucunu doğurur (not: Offset değerleri her iki durumda da aynıdır).

Tıklama ve sürüklemeye yönelik betik yanıtları

etkinlik sinyalleri, özellik değişiklikleri, Scriptable sürükleme tarzı ve özel fonksiyonlar aracılığıyla, betikler, sürüklenen UI öğelerinin manipülasyonuna yanıt vererek çeşitli ayarları yönetebilir veya mantıksal kararlar alabilir, örneğin müzik ve ses efekti ses seviyelerini ayrı ayrı ayarlayan kaydırıcılar.

Etkinlik sinyalleri

Aşağıdaki etkinlik sinyalleri aracılığıyla, bir kullanıcının bir nesneyi sürüklemeye başladığını, devam ettiğini ve sona erdiğini tespit edebilirsiniz.

EtkinlikAçıklama
DragStartBir kullanıcı nesneyi sürüklemeye başladığında tetiklenir.
DragContinueBir kullanıcı DragStart başlatıldıktan sonra nesneyi sürüklemeye devam ettiğinde tetiklenir.
DragEndBir kullanıcı nesneyi sürüklemeyi durdurduğunda tetiklenir.

Aşağıdaki kaydırıcı, sürükleme hareketini sınırlamak için konteynırını BoundingUI olarak belirleyerek, ölçek tabanlı TranslateLine sürüklemesini konteynırın tam genişliğiyle sınırlamakta, ek bir betik olmaksızın hareketin kaymasını sağlar.

UIDragDetector - Olay Sinyali Saydamlık Değişimi

-- Hiyerarşi SliderContainer ⟩ Handle ⟩ UIDragDetector ⟩ (bu betik)
local sliderContainer = script.Parent.Parent.Parent
local handle = sliderContainer:FindFirstChild("Handle")
local uiDragDetector = handle:FindFirstChildWhichIsA("UIDragDetector")
uiDragDetector.ResponseStyle = Enum.UIDragDetectorResponseStyle.Scale -- Ölçekle sürüklemeyi ayarlayın
uiDragDetector.DragStyle = Enum.UIDragDetectorDragStyle.TranslateLine -- Sürüklemeyi çizgiyle sınırlayın
uiDragDetector.BoundingUI = sliderContainer
-- Başlangıçta, konteyner saydamlığını tutamağın X ölçek değerine ayarlayın
sliderContainer.BackgroundTransparency = 1 - handle.Position.X.Scale
-- Tutma başlangıcını belirtmek için tutamağın kenarını genişletin
uiDragDetector.DragStart:Connect(function(inputPosition)
handle:FindFirstChildWhichIsA("UIStroke").Thickness = 6
end)
-- Saydamlığı, ne kadar sürüklendiğine göre değiştirin
uiDragDetector.DragContinue:Connect(function(inputPosition)
sliderContainer.BackgroundTransparency = 1 - handle.Position.X.Scale
end)
-- Tutma sonunu belirtmek için tutamağın kenarını geri alın
uiDragDetector.DragEnd:Connect(function(inputPosition)
handle:FindFirstChildWhichIsA("UIStroke").Thickness = 4
end)

Pozisyon & döndürme değişiklikleri

etkinlik sinyalleri aracılığıyla, dedektörün DragUDim2 ve/veya DragRotation özelliklerinde değişiklikleri doğrudan izleyebilirsiniz.

Aşağıdaki dedektör, kullanıcıların renk döndürücü halkasında tutamağı sürüklemesine olanak tanıyan DragStyle'ın Rotate olarak ayarlandığı bir örnektir ve tüm bunları Instance:GetPropertyChangedSignal() aracılığıyla sürükleme döndürme değişikliklerini izler.

UIDragDetector - DragRotation Değişimi

local handle = script.Parent.Parent -- Sürüklenebilir UI öğesi
local uiDragDetector = handle:FindFirstChildWhichIsA("UIDragDetector")
uiDragDetector.DragStyle = Enum.UIDragDetectorDragStyle.Rotate -- Sürükleme tarzını döndürme olarak ayarlayın
local function changeHue()
local currAngle = (math.fmod(handle.Rotation, 360)) / 360
if currAngle < 0 then
currAngle += 1
end
handle.BackgroundColor3 = Color3.fromHSV(currAngle, 1, 1)
end
-- Başlangıçta tonu tutamağın döndürülmesine göre ayarlayın
changeHue()
-- Dedektörün sürükleme döndürmesi için GetPropertyChangedSignal() işlevine bağlayın
uiDragDetector:GetPropertyChangedSignal("DragRotation"):Connect(changeHue)

Betiklenmiş sürükleme tarzı

Bir dedektörün UIDragDetector.DragStyle'ını Enum.UIDragDetectorDragStyle.Scriptable olarak ayarlarsanız, bir Vector2 girdi pozisyonunu alan ve bir UDim2 (pozisyon) ve bir float (döndürme) döndüren kendi işlevinizi sağlayabilirsiniz. Dedektör, döndürmelerin gelen değerlerine ve DragSpace ve DragRelativity özelliklerine dayalı olarak nesneyi günceller.

Varsayılan olarak, döndürülen UDim2 ve float, dedektörün üst nesnesinin yerel alanındaki final istenen pozisyon/döndürme olacaktır. Mevcut çeviri/döndürme sınırları ve belirtilmiş BoundingUI örneği tarafından dayatılan sınırlar hala uygulanır.

Aşağıdaki örnek, bir UI öğesini X koordinat girdisinin değişiminin hesaplanmasına dayanarak bir sinüs dalgası doğrultusunda sürükler. Dedektörün DragSpaceEnum.UIDragDetectorDragSpace.Relative olarak ayarlanmıştır.

UIDragDetector - Sine Dalgasını Takip Eden Sürükleme

local frame = script.Parent -- Sürüklenebilir UI öğesi
local uiDragDetector = frame:FindFirstChildWhichIsA("UIDragDetector")
local initialXValue = 0
local maxHeightChange = 200
local pixelsPerRadian = 75 -- Frekansı artırmak için bu değeri küçültün
uiDragDetector.DragStart:Connect(function(inputPosition)
initialXValue = inputPosition.X
end)
local function computeSinWaveCoordinate(inputPosition)
local deltaX = inputPosition.X - initialXValue
-- Pozitif Y değişiminde ekranda "yukarı" gitmesi için negatif Y delta
local deltaY = -math.sin(deltaX / pixelsPerRadian) * maxHeightChange
return UDim2.fromOffset(deltaX, deltaY)
end
uiDragDetector:SetDragStyleFunction(computeSinWaveCoordinate)

Özel kısıtlama işlevi

UIDragDetectors'da ızgara ve yakalamayla ilgili yerleşik hareket kuralları yoktur, ancak dedektörün UIDragDetector.DragUDim2 ve UIDragDetector.DragRotation değerlerinin uygulanmadan önce düzenlenmesi için özel kısıtlama işlevleri kaydedebilirsiniz. Örneğin, belirli artışlara yuvarlayarak hareketi bir ızgarada tutabilir veya hareket alanlarını tanımlayabilirsiniz. Bu, mevcut döndürme/çevirme sınırlarından önce uygulanır.

Aşağıdaki örnek, ızgara sütunları ve satır sayısına dayalı olarak düzlemsel sürüklemeyi sınırlayan bir kısıtlama işlevini kullanır. Dedektörün ResponseStyle değeri Enum.UIDragDetectorResponseStyle.Scale olarak ayarlanmış ve BoundingUI ızgara konteynırına ayarlanmıştır.

UIDragDetector - Kesirli Karo ile Izgarada Sürükleme

-- Hiyerarşi GridContainer ⟩ Handle ⟩ UIDragDetector ⟩ (bu betik)
local gridContainer = script.Parent.Parent.Parent
local handle = gridContainer:FindFirstChild("Handle") -- Sürüklenebilir UI öğesi
local uiDragDetector = handle:FindFirstChildWhichIsA("UIDragDetector")
uiDragDetector.ResponseStyle = Enum.UIDragDetectorResponseStyle.Scale -- Ölçekle sürüklemeyi ayarlayın
uiDragDetector.DragRelativity = Enum.UIDragDetectorDragRelativity.Relative
uiDragDetector.BoundingUI = gridContainer
local NUM_COLUMNS = 10
local NUM_ROWS = 5
local xScaleIncrement = 1 / NUM_COLUMNS
local yScaleIncrement = 1 / NUM_ROWS
local initialParentPosition = uiDragDetector.Parent.Position
uiDragDetector.DragStart:Connect(function()
initialParentPosition = uiDragDetector.Parent.Position
end)
local function dragToGridOnly(proposedPosition, proposedRotation)
local griddedXScale = math.round(proposedPosition.X.Scale / xScaleIncrement) * xScaleIncrement
local griddedYScale = math.round(proposedPosition.Y.Scale / yScaleIncrement) * yScaleIncrement
return UDim2.fromScale(griddedXScale, griddedYScale), proposedRotation
end
uiDragDetector:AddConstraintFunction(1, dragToGridOnly)
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.