Bu bölümde, hareketsiz bir nesnenin konumunu ortaya çıkaran özel kalp atışı Görsel Efektini (görsel efekt) oyununa nasıl ekleyeceğin gösterilmiştir.
Nesne takımının oyuncuları çok uzun bir süre boyunca hareketsiz kaldığında, o oyuncuda bir kalp atışı görsel efekti oynatılarak avcı takımı bilgilendirilir. Bu görsel efekt, nesne takımının oyuncuları oyun içine doğdukça her bir oyuncuya kaydedilir.
Kalp atışı işlevselliğini uygulamak için Verse ile birlikte Görsel Efekt Çıkma Yeri cihazlarını kullanacaksın. Bu, aşağıdakileri içerir:
-
Görsel efektlerin etkinleştirilmesi.
-
Görsel Efekt Çıkma Yerinin oyunculara ışınlanması.
-
Nesne takımı üyelerine, kalp atışı bitmeden önce hareket etmek için ne kadar süreleri kaldığını gösteren bir Kullanıcı Arayüzü oluşturulması.
Bu eğitim, bu oyunda ihtiyaç duyulan oyun mekaniğinin nasıl yürütüleceğini gösteren Verse kod parçacıkları içerir. Aşağıdaki adımları izle ve bu eğitimin 6. adımındaki kodun tamamını kopyala.
Başlamadan Önce

Öğe ve cihazların yerlerinin bulunmasını kolaylaştırmak için bunların klasörler altında düzenlenmiş bir şekilde tutulması iyi bir uygulamadır. Cihazları amaca, konuma, türe veya istediğin başka bir özelliğe göre gruplandırabilirsin.
Yerleştirilmiş öğeleri oluşturduğun klasör ve aktörlere taşıyabilirsin.
Yukarıdaki gif'te, Görsel Efekt Çıkma Yeri cihazı, düzenleme amacıyla nesne takımının HeartBeatVFX klasörüne sürüklenmektedir. Öğenin taşınmasını istediğin klasörü seçmek için sağ tıklayıp Şuraya Taşı’yı da seçebilirsin.
Kullanılan cihazlar:
- ~ 16 adet Görsel Efekt Çıkma Yeri
Görsel Efekt Çıkma Yeri Cihazı

Her oyuncu için bir Görsel Efekt çıkma yeri oluştur. Bir oyuncunun Görsel Efekte ihtiyacı olduğunda Görsel Efekt, oyuncunun bulunduğu yere ışınlanacaktır. Görsel Efekte artık ihtiyaç duyulmadığında Görsel Efekt, ona tekrar ihtiyaç duyulana kadar gizlenecektir.
Bu şablondaki Görsel Efekt Çıkma Yerleri, oynanış sırasında gösterilen özel öğeler oluşturmak için Niagara Görsel Efektini kullanır. Bu eğitimde kullanılan Görsel Efekt öğeleri, nesne takımındaki hareketsiz oyuncuları ortaya çıkarmak için bir kalp atışı görüntüleyecek şekilde ayarlanmıştır. Bu Görsel Efekt, en az 15 saniye boyunca statik olan nesneler üzerinde görünür.
Kalp atışı Görsel Efektinin nasıl oluşturulacağına ilişkin birçok eğitim için dokümantasyonumuzun Görsel Efektler bölümünü ziyaret edebilirsin. Ardından, Görsel Efekt Çıkma Yeri ile oluşturduğun özel kalp atışını kullanabilirsin.
Bunu, bir Görsel Efekt Çıkma Yeri yerleştirdiğinde deneyebilirsin. Ayrıntılar panelinde, Özel Görsel Efekt açılır menüsünden özel efektini seç. Seçilen Görsel Efektin görünüm penceresinde görünmesi için Özel Görsel Efekt Geçersiz Kılması’nı etkinleştirdiğinden emin ol.

Buradan, renk ekleyerek ve Görsel Efektin ne zaman oynatılacağına ve kim tarafından görüleceğine karar vererek efektini Ayrıntılar panelinden daha da özelleştirebilirsin.
Bu cihazı oyuncular tarafından görülmeyen bir konuma yerleştir ve Kullanıcı Seçenekleri’ni aşağıdaki tabloyla eşleşecek şekilde yapılandır. Ardından bu cihazı, oyununun izin verdiği oyuncu sayısına uyacak şekilde kopyalayıp yapıştır.

Seçenek | Değer | Açıklama |
---|---|---|
Özel Görsel Efekt | HeartBeatVFX | Önayar listesindeki bir parçacık yerine, kullanılacak özel bir parçacık tanımlar. |
Özel Görsel Efekt Geçersiz Kılması | True | Geliştirici efektlerinin kullanılıp kullanılmayacağını belirler. |
Şu Aşamada Etkin: | Sadece Oynanış | Cihazın etkinleştirileceği oyun aşamalarını belirler. Etkinleştirilmiş bir Görsel Efekt Çıkma Yeri belirlenmiş parçacık efektlerini oynatır. |
Bir Konumda Kalp Atışı Efektlerini Oynat
Nesne takımının oyuncuları üzerinde kalp atışı efektini oynatmak ve durdurmak üzere Verse’te Görsel Efekt Çıkma Yeri cihazını taşımak için bu adımları izle.
-
Projende heartbeat.verse adlı yeni bir Verse dosyası oluştur. Bu bir Verse cihazı olmayacağından onu boş bir Verse dosyası olarak oluşturabilirsin.
-
Aşağıdaki içe aktarılacak Verse yollarını eklemek için, oluşturduğun Verse dosyasına çift tıklayarak işleme başla.
using { /Fortnite.com/Characters } using { /Fortnite.com/Devices } using { /Fortnite.com/UI } using { /UnrealEngine.com/Temporary/SpatialMath } using { /UnrealEngine.com/Temporary/Diagnostics } using { /UnrealEngine.com/Temporary/UI } using { /Verse.org/Colors } using { /Verse.org/Simulation }
-
Bu kod heartbeat.verse içinde
heartbeat_vfx
adında bir sınıf oluşturur.heartbeat_vfx
sınıfı, oyuncu başınavfx_spawner_device
objelerinin takip edilmesine yönelik bir veri yapısının yanı sıra Görsel Efektin bir konuma ayarlanmasına veya sıfırlanmasına yönelik fonksiyonları içerir.log_heart_beat := class(log_channel){} # Bu mesajlar, bir nesne aracısını, nesne aracısının, kalp atışının görünür olmasını önlemek için hareket etmesi gerektiğinde bir mesajla bilgilendirmek (veya onu gizlemek) için kullanılır. HeartBeatWarningMessage<localizes>(Time:int):message = "{Time} Saniye İçinde Kalp Atışı. Yürü!" HeartBeatWarningClear<localizes>:message = "" # Bu sınıf, kalp atışı için düzenlenebilir özellikleri prop_hunt Verse cihazında kullanıma sunar. heart_beat := class<concrete>(): Logger:log = log{Channel:=log_heart_beat} @editable # Bir nesne aracısının, kalp atışı onun konumunu ortaya çıkarmadan önce hareket etmesi gereken saniye cinsinden süre. MoveTime:float = 15.0 @editable # Kalp atışı uyarısı görünmeden önce kalan saniye. HeartBeatTimer’dan fazla olmamalıdır. WarningTime:float = 5.0 @editable # Bir kalp atışı Görsel Efekt cihazları dizisi. Bunlardan oyuncu başına bir tane vardır. AgentVFX:[]heartbeat_vfx = array{} @editable # Kalp atışı ses efektlerini (SFX) çalmak için kullanılan Radyo Çalar cihazı. SFXPlayer:radio_device = radio_device{} # Bu harita, kalp atışı uyarısının görüntülenmesine yönelik Kullanıcı Arayüzünü her bir nesne aracısıyla ilişkilendirir. var WarningUI:[agent]heartbeat_warning_ui = map{} # Ses Efekti cihazını yönetebilmemiz için kaç oyuncunun aktif bir kalp atışına sahip olduğunu takip eder. var NumberOfHeartBeats:int = 0 # Aracı için kalp atışı Kullanıcı Arayüzünü ayarlar. SetUpUI(PropAgent:agent):void = if: not WarningUI[PropAgent] AsPlayer := player[PropAgent] PlayerUI := GetPlayerUI[AsPlayer] then: UIData:heartbeat_warning_ui = heartbeat_warning_ui{} UIData.CreateCanvas() PlayerUI.AddWidget(UIData.Canvas, player_ui_slot{ZOrder := 1}) if (set WarningUI[PropAgent] = UIData) {} # Belirtilen oyuncu için kalp atışı Görsel Efekti ve Ses Efektini etkinleştirir. Enable(PropAgent:agent, HeartBeatVFXData:heartbeat_vfx):void = if: # Nesne aracısının sahnedeki konumunu bulmak için kullanılan karakteri al. Character := PropAgent.GetFortCharacter[] then: # Kalp atışı Görsel Efektinin konumunu nesne aracısının konumuna ayarla. HeartBeatVFXData.Activate(Character.GetTransform()) # Kalp atışı sayısını artır, ayrıca bu, çalan ilk kalp atışıysa onu başlatmak için sesi çalmamız gerekir. set NumberOfHeartBeats += 1 if (NumberOfHeartBeats = 1) then SFXPlayer.Play() # Nesne aracısını ses çalar cihazına kaydet, böylece kalp atışı sesi, o konumdan çalınabilecektir. SFXPlayer.Register(PropAgent) else: Logger.Print("Karakter, Dizin veya HeartBeatVFXData bulunamadı. Kalp atışı başlatılamıyor") # Belirtilen nesne aracısı için kalp atışı Görsel Efekti ve Ses Efektini temizler. Disable(PropAgent:agent, HeartBeatVFXData:heartbeat_vfx):void = Logger.Print("Kalp atışı devre dışı bırakılıyor.") # Görsel Efekt görsellerini devre dışı bırak. HeartBeatVFXData.Deactivate() # Ses çalar cihazından nesne aracısının kaydını sil; bunun sonucunda kalp atışı sesi duracaktır. SFXPlayer.Unregister(PropAgent) # Kalp atışı sayacını azalt. Bu sayaç hiçbir zaman 0’ın altına düşmemelidir. set NumberOfHeartBeats -= 1 if (NumberOfHeartBeats < 0) then set NumberOfHeartBeats = 0 # Tüm nesne aracıları için tüm kalp atışı Görsel Efektleri ve Ses Efektlerini temizler. DisableAll():void = Logger.Print("Tüm kalp atışları devre dışı bırakılıyor.") # Tüm Görsel Efektlerin üzerinden geç ve bunları 0,0,0’a taşı. for (HeartBeatVFXDevice : AgentVFX): HeartBeatVFXDevice.Deactivate() # Kalp atışı sesinden tüm oyuncuların kaydını sil. SFXPlayer.UnregisterAll() # Kalp atışı sayacını 0 olacak şekilde yeniden başlat set NumberOfHeartBeats = 0 # heartbeat_warning_ui sınıfı, oyuncu başına Kullanıcı Arayüzü tuvali ve text_block’unun takip edilmesine yönelik bir veri yapısının yanı sıra yeni bir kalp atışı uyarısı Kullanıcı Arayüzü tuvali oluşturulmasına yönelik fonksiyonu içerir. heartbeat_warning_ui := class: var Canvas:canvas = canvas{} var Text:text_block = text_block{} # Uyarı mesajı için Kullanıcı Arayüzü tuvalini oluşturur. CreateCanvas():void = set Text = text_block{DefaultTextColor := NamedColors.White, DefaultShadowColor := NamedColors.Black} set Canvas = canvas: Slots := array: canvas_slot: Anchors := anchors{Minimum := vector2{X := 0.5, Y := 0.75}, Maximum := vector2{X := 0.5, Y := 0.75}} Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0} Alignment := vector2{X := 0.5, Y := 1.0} SizeToContent := true Widget := Text
-
Bu kod,
heartbeat_vfx
sınıfında, bir dönüşüm bağımsız değişkenini alan ve Görsel Efekt Çıkma Yeri cihazını budönüşüm
e taşıyan birActivate()
metodu oluşturur.# heartbeat_vfx sınıfı, Görsel Efektin kökünün ve oyuncu başına vfx_spawner_device objelerinin takip edilmesine yönelik bir veri yapısının yanı sıra Görsel Efektin bir konuma ayarlanmasına veya sıfırlanmasına yönelik fonksiyonları içerir. heartbeat_vfx := class<concrete>: @editable # Her kalp atışı için Görsel Efekt cihazı. VFXDevice:vfx_spawner_device = vfx_spawner_device{} # Bu ofset, kalp atışını, bir nesne aracısının başının üzerine konumlandırmak için kullanılır. HeartBeatVFXOffset:vector3 = vector3{X := 0.0, Y := 0.0, Z := 110.0} # Kalp atışı Görsel Efektinin konumunu ayarlar ve ardından Görsel Efekti etkinleştirir. Activate(Transform:transform):void = VFXPosition := Transform.Translation + HeartBeatVFXOffset if (VFXDevice.TeleportTo[VFXPosition, Transform.Rotation]): VFXDevice.Enable()
-
Bu kod,
heartbeat_vfx
sınıfında, Görsel Efekt Çıkma Yeri cihazını devre dışı bırakan, dolayısıyla da kalp atışı görsellerini gizleyen birDeactivate()
metodu oluşturur.# heartbeat_vfx sınıfı, Görsel Efektin kökünün ve oyuncu başına vfx_spawner_device objelerinin takip edilmesine yönelik bir veri yapısının yanı sıra Görsel Efektin bir konuma ayarlanmasına veya sıfırlanmasına yönelik fonksiyonları içerir. heartbeat_vfx := class<concrete>: @editable # Her kalp atışı için Görsel Efekt cihazı. VFXDevice:vfx_spawner_device = vfx_spawner_device{} # Bu ofset, kalp atışını, bir nesne aracısının başının üzerine konumlandırmak için kullanılır. HeartBeatVFXOffset:vector3 = vector3{X := 0.0, Y := 0.0, Z := 110.0} # Kalp atışı Görsel Efektinin konumunu ayarlar ve ardından Görsel Efekti etkinleştirir. Activate(Transform:transform):void = VFXPosition := Transform.Translation + HeartBeatVFXOffset if (VFXDevice.TeleportTo[VFXPosition, Transform.Rotation]): VFXDevice.Enable() # Görsel Efekti devre dışı bırakarak kalp atışı görsellerini gizler. Deactivate():void = VFXDevice.Disable()
Oyuncuya Kalp Atışı Uyarısı Görüntüle
Kalp atışı uyarı mesajını görüntüleyecek bir metin bloku içeren özel bir Kullanıcı Arayüzü oluşturmak için bu adımları izle. Özel Kullanıcı Arayüzü ve diğer Verse Kullanıcı Arayüzü bileşenleri oluşturulmasıyla ilgili daha fazla bilgi almak için Oyun İçi Kullanıcı Arayüzleri bölümüne bakabilirsin.
-
Aşağıdaki iki sabit, oyunun farklı zamanlarında nesne takımının oyuncularına gösterilecek metni kontrol eder.
-
HeartBeatWarningMessage
sabiti, birint
değeri alan vemessage
türünü döndüren bir fonksiyondur. Bu tür, yerelleştirilebileceği için Kullanıcı Arayüzü öğelerinde kullanılır. Oyuncuların, kalp atışı efektlerinin, onların konumlarını açığa çıkarmasını önlemek için hareket etmeleri gerektiğinde görecekleri metin budur. -
HeartBeatWarningClear
sabiti ise oyuncuların artık uyarı mesajını görmemesi için gösterilecek boş birmesaj
dır.
# Bu mesajlar, bir nesne aracısını, nesne aracısının, kalp atışının görünür olmasını önlemek için hareket etmesi gerektiğinde bir mesajla bilgilendirmek (veya onu gizlemek) için kullanılır. HeartBeatWarningMessage<localizes>(Time:int):message = "{Time} Saniye İçinde Kalp Atışı. Yürü!" HeartBeatWarningClear<localizes>:message = ""
-
-
heartbeat.verse içinde
heartbeat_warning_ui
adlı yeni bir sınıf oluştur. heartbeat_warning_ui sınıfı, oyuncu başına Kullanıcı Arayüzü tuvali ve text_block’unun takip edilmesine yönelik bir veri yapısının yanı sıra yeni bir kalp atışı uyarısı Kullanıcı Arayüzü tuvali oluşturulmasına yönelik fonksiyonu içerir.# heartbeat_warning_ui sınıfı, oyuncu başına Kullanıcı Arayüzü tuvali ve text_block’unun takip edilmesine yönelik bir veri yapısının yanı sıra yeni bir kalp atışı uyarısı Kullanıcı Arayüzü tuvali oluşturulmasına yönelik fonksiyonu içerir. heartbeat_warning_ui := class: var Canvas:canvas = canvas{} var Text:text_block = text_block{} # Uyarı mesajı için Kullanıcı Arayüzü tuvalini oluşturur. CreateCanvas():void = set Text = text_block{DefaultTextColor := NamedColors.White, DefaultShadowColor := NamedColors.Black} set Canvas = canvas: Slots := array: canvas_slot: Anchors := anchors{Minimum := vector2{X := 0.5, Y := 0.75}, Maximum := vector2{X := 0.5, Y := 0.75}} Offsets := margin{Top := 0.0, Left := 0.0, Right := 0.0, Bottom := 0.0} Alignment := vector2{X := 0.5, Y := 1.0} SizeToContent := true Widget := Text
Kalp Atışı Efektlerini Yönet
Kalp atışı yöneticisini oluşturmak için bu adımları izle.
-
Aşağıdaki kod heartbeat.verse’te
heart_beat
adında bir sınıf oluşturur. # Bu sınıf, kalp atışı için düzenlenebilir özellikleri prop_hunt cihazında kullanıma sunar ve kalp atışı efektlerini yönetir.log_heart_beat := class(log_channel){} # Bu sınıf, kalp atışı için düzenlenebilir özellikleri prop_hunt cihazında kullanıma sunar. heart_beat := class<concrete>(): Logger:log = log{Channel:=log_heart_beat} @editable MoveTime:float = 15.0
- Bu kod,
heart_beat
sınıfına aşağıdaki düzenlenebilir özellikleri ekler.-
Bu kod, bir nesne aracısının, kalp atışı efekti onun konumunu ortaya çıkarmadan önce hareket etmesi gereken saniye cinsinden süreyi kontrol eder.
@editable MoveTime:float = 15.0
-
Bu kod, bir nesne takımı üyesinin uyarılmasına ve ona, kalp atışı bitmeden önce hareket etmesinin söylenmesine yönelik kelimeler ekranda görünmeden önce kalan saniye cinsinden süreyi kontrol eder.
@editable WarningTime:float = 5.0
-
Bu kod, bir kalp atışı Görsel Efekt cihazları dizisidir. Bunlardan oyuncu başına bir tane vardır.
@editable AgentVFX:[]heartbeat_vfx = array{}
-
Bu kodda, kalp atışı ses efektlerini (SFX) çalmak için Radyo Çalar cihazı kullanılır.
@editable SFXPlayer:radio_device = radio_device{}
-
-
-
Bu kod haritası, kalp atışı uyarısının görüntülenmesine yönelik Kullanıcı Arayüzünü her bir nesne aracısıyla ilişkilendirir.
# Bu harita, kalp atışı uyarısının görüntülenmesine yönelik Kullanıcı Arayüzünü her bir nesne aracısıyla ilişkilendirir. var WarningUI:[agent]heartbeat_warning_ui = map{}
-
Bu kod, Ses Efekti cihazını yönetebilmemiz için kaç oyuncunun aktif bir kalp atışına sahip olduğunu takip eder.
# Ses Efekti cihazını yönetebilmemiz için kaç oyuncunun aktif bir kalp atışına sahip olduğunu takip eder. var NumberOfHeartBeats:int = 0
-
Bu kod, oyunculara yönelik uyarı Kullanıcı Arayüzünü gösterir.
# Aracı için kalp atışı Kullanıcı Arayüzünü ayarlar. SetUpUI(PropAgent:agent):void = if: not WarningUI[PropAgent] AsPlayer := player[PropAgent] PlayerUI := GetPlayerUI[AsPlayer] then: UIData:heartbeat_warning_ui = heartbeat_warning_ui{} UIData.CreateCanvas() PlayerUI.AddWidget(UIData.Canvas, player_ui_slot{ZOrder := 1}) if (set WarningUI[PropAgent] = UIData) {}
-
Bu kod, belirtilen oyuncu için görsel efektler (VFX) ile ses efektlerini (SFX) etkinleştirir.
# Belirtilen oyuncu için kalp atışı Görsel Efekti ve Ses Efektini etkinleştirir. Enable(PropAgent:agent, HeartBeatVFXData:heartbeat_vfx):void = if: # Nesne aracısının sahnedeki konumunu bulmak için kullanılan karakteri al. Character := PropAgent.GetFortCharacter[] then: # Kalp atışı Görsel Efektinin konumunu nesne aracısının konumuna ayarla. HeartBeatVFXData.Activate(Character.GetTransform()) # Kalp atışı sayısını artır, ayrıca bu, çalan ilk kalp atışıysa onu başlatmak için sesi çalmamız gerekir. set NumberOfHeartBeats += 1 if (NumberOfHeartBeats = 1) then SFXPlayer.Play() # Nesne aracısını ses çalar cihazına kaydet, böylece kalp atışı sesi, o konumdan çalınabilecektir. SFXPlayer.Register(PropAgent) else: Logger.Print("Karakter, Dizin veya HeartBeatVFXData bulunamadı. Kalp atışı başlatılamıyor")
-
Bu kod, bir oyuncu için Görsel Efekt ile Ses Efektinin devre dışı bırakılmasına yönelik bir metot ile bunların tüm oyuncular için devre dışı bırakılmasına yönelik başka bir metot oluşturur.
# Belirtilen nesne aracısı için kalp atışı Görsel Efekti ve Ses Efektini temizler. Disable(PropAgent:agent, HeartBeatVFXData:heartbeat_vfx):void = Logger.Print("Kalp atışı devre dışı bırakılıyor.") # Görsel Efekt görsellerini devre dışı bırak. HeartBeatVFXData.Deactivate() # Ses çalar cihazından nesne aracısının kaydını sil; bunun sonucunda kalp atışı sesi duracaktır. SFXPlayer.Unregister(PropAgent) # Kalp atışı sayacını azalt. Bu sayaç hiçbir zaman 0’ın altına düşmemelidir. set NumberOfHeartBeats -= 1 if (NumberOfHeartBeats < 0) then set NumberOfHeartBeats = 0 # Tüm nesne aracıları için tüm kalp atışı Görsel Efektleri ve Ses Efektlerini temizler. DisableAll():void = Logger.Print("Tüm kalp atışları devre dışı bırakılıyor.") # Tüm Görsel Efektlerin üzerinden geç ve bunları 0,0,0’a taşı. for (HeartBeatVFXDevice : AgentVFX): HeartBeatVFXDevice.Deactivate() # Kalp atışı sesinden tüm oyuncuların kaydını sil. SFXPlayer.UnregisterAll() # Kalp atışı sayacını 0 olacak şekilde yeniden başlat set NumberOfHeartBeats = 0