Sünnetçi97

Yeni üye
2 Tem 2015
35
3
0
(34) İstanbul Avrupa
Öncelikle Merhaba, takıldığım bir iki konu var,vakit kaybetmeden hemen sorayım.
Oyuna başladığımda ekranda bir yazı yazmasını istiyorum.Örnek 'Sağındaki Fıçıya Dokunma' Diye bunu Widget ile yaptım(Yazı işlemini) ve Character BP inde event begin play komutu ile ekrana yazdırdım,Sıkıntı yok burda,ama ben isiyorum ki character fıçıya dokunduğunda ekrana başka bir yazı yazılsın.Yani O widget silinsin ve başka widget yazılsın (Fıçının olduğu yere Trigger Box koydum)

1)Character fıçıya dokunduğunda o widget ı silip yerine başka widget ı nasıl yazdırabilirim.Ve bunu Triggger box un BP sinden mi yapıcam acaba ?
2)ekrana widget dışında başka nasıl yazı yazdırabilirim.
3)Bu sorunun bu olayla alakası yok ama sorayım yinede 'Character BP sinde sadece Bir tane mi 'EventBeginPlay' Kodu kullanabiliyorum.Eğer öyle ise 'EventBeginPlay' den sqeunce çıkarıp yapılacak işlemleri ona bağlıyorum bu normal mi?
Not:İlk defa konu açıyorum,yanlış yere açtıysam,adminlerim kusura bakmayınız :)
 
1- Bunun birden çok yolu var. Aslında text' i bind etmek en iyisi diye düşünüyorum. Ancak daha kolay bir yol olarak ;
Create widget (ilkW)> Add to viewport > Trigger box' a gelince remove from parent(ilkW), Create Widget (ikinciW) >Add to viewport şeklinde yapılabilir.
2- Soldaki models bölümünde "text render" diye bir actor var. Onu sahneye sürükle/bırak yaparak atıp, içine istediğini yazabilirsin.
Ayrıca : Hud BP' den de bu işlemleri yapabilirsin. Teslanın bu konuda küçük bir tutorial'ı var :
Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.

3- Evet. Event Begin play ve Event Tick bir tane ancak Sequence ile veya custom Event ile farklı yerlere ateşleyebilirsin. Seq.işlemin normal.
 
Sünnetçi97' Alıntı:
Öncelikle Merhaba, takıldığım bir iki konu var,vakit kaybetmeden hemen sorayım.
Oyuna başladığımda ekranda bir yazı yazmasını istiyorum.Örnek 'Sağındaki Fıçıya Dokunma' Diye bunu Widget ile yaptım(Yazı işlemini) ve Character BP inde event begin play komutu ile ekrana yazdırdım,Sıkıntı yok burda,ama ben isiyorum ki character fıçıya dokunduğunda ekrana başka bir yazı yazılsın.Yani O widget silinsin ve başka widget yazılsın (Fıçının olduğu yere Trigger Box koydum)

1)Character fıçıya dokunduğunda o widget ı silip yerine başka widget ı nasıl yazdırabilirim.Ve bunu Triggger box un BP sinden mi yapıcam acaba ?
2)ekrana widget dışında başka nasıl yazı yazdırabilirim.
3)Bu sorunun bu olayla alakası yok ama sorayım yinede 'Character BP sinde sadece Bir tane mi 'EventBeginPlay' Kodu kullanabiliyorum.Eğer öyle ise 'EventBeginPlay' den sqeunce çıkarıp yapılacak işlemleri ona bağlıyorum bu normal mi?
Not:İlk defa konu açıyorum,yanlış yere açtıysam,adminlerim kusura bakmayınız :)

1) "TriggerBox Blueprint" üzerinde "OnComponentBeginOverlap" olayında "RemoveFromViewport" kullanarak bir "Widget"ı kaldırabilir, "Create Widget" ve "Add To Viewport" diyerek yeni bir "Widget" oluşturabilirsin. Forumda "Trigger Box" kelimesi ile arama yaparak başka örneklere erişebilirsin.

2) HUD sınıfından kalıtım almış bir "Blueprint Class" oluşturup "Event Recieve Draw HUD" olayı üzerinde "Draw Text" nodunu kullanabilirsin. "GameMode" üzerinde bu "HUD Class" varsayılan "HUD Class" olarak gösterilmelidir.
https://docs.unrealengine.com/latest/INT/BlueprintAPI/HUD/DrawText/index.html

Ama aslında bu yazılar çok sayıda ve özel bir tasarım içermiyorsa yapılması gereken değişkenlerde/dizide saklamaktır. Tek bir "Widget" üzerinde ilgili "Text"i ilgili durumlarda değiştirerek daha esnek ve rahat bir sistem oluşturabilirsin. Sadece belirli mesajlar vermek için farklı "Widget" kullanmaya gerek yok hatta bu yazılım tasarım yaklaşımlarına aykırı bir durumdur. Binlerce farklı yazı için binlerce farklı "Widget" oluşturmak gerekecektir. Bunun yerine farklı biçim ve durumlar için kategoriler oluşturup, bir yada birkaç tane "Widget" kullanıp ilgili yerlerini değiştirmek daha doğru bir yaklaşımdır.

3)" BeginPlay", çağrıldığı "class" üzerinde, kurulup yüklendikten sonra çağrılan ilk olaydır. "Tick" ile her frame döngüsüne girmeden önce yalnızca bir kez çalışır. Bu "class" için başlangıçta yapılması gereken işlemlerin sayısı ne kadar ise hepsini "Sequence" ile burada halletmek doğru bir yaklaşımdır. Elbette oyun programlarken nesne üzerinde tek bir hamlede çalışacak kodun frame gecikmesi yaratmamasına dikkat etmek gerekir. Yine de "BeginPlay", "Tick" kadar kritik değildir.

Not: Konunun yeri doğru bir sorun yok ama vurgu, başlık, belirteç...vb olmadıkça forumun normal puntolarını kullanmalısın.
 
2vt321g.jpg
 
Çok teşekkür ederim.Gerçekten,vakit ayırıyorsunuz hiç bir şey gözetmeden yardım ediyorsunuz.Allah razı olsun, dua etmekten başka şu an için elimden bir şey gelmiyor.Adamsınız  :shy: ama bir sorum daha var qukla bey.Bunu yaptım sıkıntı yok ama ben istiyorum ki 2.widgettan sonra adam öldükten sonra başka bir widget gelsin ekrana onun için de şöyle bir BP hazırladım ama hata alıyorum acaba nasıl düzeltebilirim.
2. olarak acaba şöyle bir seçenekte varmı widget ta mesela oyun başladı bi yazı çıktı 5 saniye sonra kayboldu. bunu yapabilir miyim?
Cahitbey size de çok teşekkürler ama 'removefromviewport' adlı bir kod bulamadım :/ ve anlattıklarınız biraz karmaşık geldi daha acemi olduğumdan dolayı sanırım.Ama HUD olayını araştırıcam teşekkürler :)

Edit:Ekteki birinci resim Character Bp inde ben bunu ikinci deki gibi yapmaya çalıştım ve hata aldım :/
 

Ekli dosyalar

  • adsasd.jpg
    adsasd.jpg
    122.3 KB · Görüntüleme: 8
  • 2222.jpg
    2222.jpg
    153.3 KB · Görüntüleme: 7
Ne demek : )

Character BP' de oluşturduğun "health" isimli değişkeni Level BP' de bu şekilde kullanamazsın. 2 BP arasında iletişim kurman gerek. Bunun için de " cast to" node ' u lazım.
Level BP ' de cast to thirdpersonbluepirnt > object pinini " player character" e bağlayarak as third person.. olan pin' den "get health" diyerek o işlemi yapabilirsin.

5 sn sonra kaybolması için " delay " nodunu kullanabilirsin. yani 5sn delay>remove from parent şeklinde.
 
qukla' Alıntı:
Ne demek : )

Character BP' de oluşturduğun "health" isimli değişkeni Level BP' de bu şekilde kullanamazsın. 2 BP arasında iletişim kurman gerek. Bunun için de " cast to" node ' u lazım.
Level BP ' de cast to thirdpersonbluepirnt > object pinini " player character" e bağlayarak as third person.. olan pin' den "get health" diyerek o işlemi yapabilirsin.

5 sn sonra kaybolması için " delay " nodunu kullanabilirsin. yani 5sn delay>remove from parent şeklinde.

yine bir yerde hata yapıyorum ama :/
 

Ekli dosyalar

  • 3.jpg
    3.jpg
    249.4 KB · Görüntüleme: 16
qukla' Alıntı:
"Cast to ." node unu sağ tıkla "convet to pure cast" yap.

Yada giriş pin' ini bir event'e ya da event' in devamına bağla.

tamam yaptım ama bir sorum daha var.Ben her trigger box a dokunduğumda aynı işlemi yapıyor.Bunu sadece ilk doğunduğunda o işlemi yapmasını sağlayabilirmiyiz.2. değdiğimde yapmasın istiyorum veya başka bir işlem yapamsını istiyorum ?
 
Sünnetçi97' Alıntı:
qukla' Alıntı:
"Cast to ." node unu sağ tıkla "convet to pure cast" yap.

Yada giriş pin' ini bir event'e ya da event' in devamına bağla.

tamam yaptım ama bir sorum daha var.Ben her trigger box a dokunduğumda aynı işlemi yapıyor.Bunu sadece ilk doğunduğunda o işlemi yapmasını sağlayabilirmiyiz.2. değdiğimde yapmasın istiyorum veya başka bir işlem yapamsını istiyorum ?

Trigger üzerinde boolean bir değişken oluştur, varsayılan olarak true başlat. Daha önceden yapmış olduğun bu işlemlerin başında bu bool değikeni branch et. True çıkışına bu olayları bağla ve bu olayların sonunda bool değişkenini false yap. Detay için forumda Trigger diye arama yapabilirsin bir çok örnek mevcut.