Kullanıcılar 3D alandaki nesnelere yaklaştıklarında görünen etkileşimli yakınlık istemleri oluşturabilir ve ardından kullanıcı girdisi ile eylemleri tetikleyebilirsiniz.
Bu eğitim, Dungeon Delve projesini bir vitrin olarak kullanmaktadır. Devam etmeden önce, bunu Studio'da açın.

Bir istem oluşturun
Ekrandaki istemler, bir ProximityPrompt nesnesinin bir Attachment, BasePart veya Model nesnesine bağlı olarak oluşturulur.
3D görünümde veya Explorer'dan (Workspace → PromptObjects → PrisonDoor) PrisonDoor modelini seçin.


Ağaç yapısını genişletin ve Door nesnesini seçin.

Bir istemi Attachment üzerine yerleştirmek, etkileşim noktasının nerede gerçekleşeceği üzerinde daha fazla kontrol sağlar; doğrudan parça/model üzerine yerleştirmek yerine. Yeni bir Attachment ekleyin ve adını PromptAttachment olarak değiştirin.

Yeni eklemenin Position özelliğini bulun ve -2.25, -0.5, -0.5 olarak ayarlayın. Bu, kapının anahtar deliğinin önüne taşınmasını sağlar.


PromptAttachment üzerine gelin ve yeni bir ProximityPrompt nesnesi ekleyin.

İstem görünümü
İstemler, aşağıdaki özelliklerle kontrol edilebilen üç ana öğeden oluşur:

- ObjectText — Etkileşimde bulunulan nesne için isteğe bağlı bir ad.
- ActionText — Kullanıcıya gösterilen isteğe bağlı bir eylem adı.
- KeyboardKeyCode — İstemi tetikleyecek olan klavye tuşu.
- GamepadKeyCode — İstemi tetikleyecek olan oyun kumandası düğmesi.
Hapishane kapısı isteminin görünümünü özelleştirmek için aşağıdaki değişiklikleri yapın:
Properties penceresinde ObjectText özelliğini bulun ve Kapı yazın.

ActionText özelliği için Kilit Aç yazın.

Etkinleştirme mesafesi
İstemler, kullanıcının karakteri istem nesnesinin ebeveyninin tanımlı MaxActivationDistance aralığına girdiğinde görünür.

Varsayılan değer çoğu durumda iyi çalışır, ancak kullanıcı etkileşimini kilide daha yakın hale getirmek için MaxActivationDistance değerini 4 olarak değiştirebilirsiniz.

Tutma süresi
HoldDuration özellik değeri, istemin eyleminin tetiklenme hızını belirler, saniye cinsinden. Bu kapının açılması için kilitlenmesi gerektiğinden, HoldDuration özelliğini 4 olarak değiştirin.

Bir eylemi uygulayın
İstem olaylarını algılamanın en iyi yolu ProximityPromptService kullanmaktır — bu, her istem nesnesine bir betik eklemeden olayları merkezi olarak algılamanızı sağlar.
Temel bir çerçeve aşağıdaki gibidir:
local ProximityPromptService = game:GetService("ProximityPromptService")
-- İstem tetiklendiğinde algıla
local function onPromptTriggered(promptObject, player)
end
-- İstem tutma başladığında algıla
local function onPromptHoldBegan(promptObject, player)
end
-- İstem tutma sona erdiğinde algıla
local function onPromptHoldEnded(promptObject, player)
end
-- İstem olaylarını işleme fonksiyonlarına bağla
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)| Olay | Açıklama |
|---|---|
| PromptTriggered | Kullanıcı bir istemle etkileşime girdiğinde tetiklenir (sonrasında sıfırdan büyük HoldDuration süresi için). |
| PromptButtonHoldBegan | Kullanıcı sıfırdan büyük HoldDuration olan bir istemle etkileşime girmeye başladığında tetiklenir. |
| PromptButtonHoldEnded | Kullanıcı sıfırdan büyük HoldDuration olan bir istemle etkileşimi durdurduğunda tetiklenir. |
Dungeon Delve projesinde, bu olaylar ServerScriptService içindeki PromptEvents betiği tarafından yönetilmektedir.

Betiğin içinde, yukarıdaki olaylar basitçe ObjectActions ModuleScript içindeki fonksiyonları çağırır; bu da ServerScriptService içinde bulunmaktadır.
local ProximityPromptService = game:GetService("ProximityPromptService")
local ServerScriptService = game:GetService("ServerScriptService")
local ObjectActions = require(ServerScriptService.ObjectActions)
-- İstem tetiklendiğinde algıla
local function onPromptTriggered(promptObject, player)
ObjectActions.promptTriggeredActions(promptObject, player)
end
-- İstem tutma başladığında algıla
local function onPromptHoldBegan(promptObject, player)
ObjectActions.promptHoldBeganActions(promptObject, player)
end
-- İstem tutma sona erdiğinde algıla
local function onPromptHoldEnded(promptObject, player)
ObjectActions.promptHoldEndedActions(promptObject, player)
end
-- İstem olaylarını işleme fonksiyonlarına bağla
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)Yakınlık istemleri, oyun içi nesne etkileşimi için kullanışlı ve özelleştirilebilir bir çözümdür. İstem davranışını kontrol etmenin daha fazla yolu için ProximityPrompt ve ProximityPromptService referans sayfalarına göz atın ve yaratıcı ilham için Dungeon Delve içindeki diğer etkileşimli nesneleri keşfedin.