Unity3D InvokeRepeating komutu yokmuş gibi çalışıyor

Elektrikci_Hasan

Hectopat
Katılım
31 Aralık 2019
Mesajlar
4.512
Makaleler
1
Çözümler
29
Yer
Trabzon
Daha fazla  
Cinsiyet
Erkek
Arkadaşlar C# dilinde başlıktaki kod çalışmıyor sanki hiç yazılmamış gibi devam ediyor. Herhangi bir sorun bulunamadı yazıyor ama kod çalışmıyor yardımcı olabilecek birileri varsa, bu işten anlayan C# ve Unity bilen; sıkıntı yaşadığım kod satırlarının resmini atacağım.
 
Ivokerepeating derken, ınvokerepeating metodunu kast ediyorsun sanırım. Açıkçası ınvoke ve ınvokerepeatingi çok az kullandım, kullanan da görmedim. Onun yerine coroutine kullanabilirsin, en azından daha anlaşılır. Coroutine içerisinde repeat yaptırmak için ise while(true) döngüsü kullan.

[CODE lang="csharp" title="Coroutine" highlight="3,9,10,7"]
private void Start()
{
StartCoroutine(Foo());
}
public IEnumerator Foo()
{
while (true)
{
yield return new WaitForSeconds(1);
// Her bir saniyede olacak isler
}
yield return null;
}
}[/CODE]
 
@Foxie Başlığı düzelttiler söyledim. Aynen Invoke komutu şimdi ne yazmaya çalıştığımı anlatacağım sonra kodları göstereceğim sana.

Can = 100 Bunu karakterin canı 100 olarak düşünebilirsin.
Can 30'un altına indiği anda +30 can kazanılacak yani mesela 100'den 20'ye indi diyelim hemen 20+30 = 50 can olacak.
30 can gelecek. Lakin bu bir anda değil de 1 saniyede bir 2 can yüklenerek olacak.

Yani 20 > 50 değil
Bu şekilde 20 > 1sn sonra 22 > 1sn sonra 24 > 1sn sonra 26 > 1sn sonra 28 > 1sn sonra 30 diye 50'ye kadar devam edecek. Kodları yazdım bu şekilde ;

Invoke.png


Unity'de çalıştırıp Public int değerini 20 yaptığım zaman direk patır patır 1 saniyede resimdeki gibi konsolda gözüküyor. Halbuki 2 can değerlerini 1'er saniye ara ile artırarak yapması lazım.

konsol.png
 
@Foxie Başlığı düzelttiler söyledim. Aynen Invoke komutu şimdi ne yazmaya çalıştığımı anlatacağım sonra kodları göstereceğim sana.

Can = 100 Bunu karakterin canı 100 olarak düşünebilirsin.
Can 30'un altına indiği anda +30 can kazanılacak yani mesela 100'den 20'ye indi diyelim hemen 20+30 = 50 can olacak.
30 can gelecek. Lakin bu bir anda değil de 1 saniyede bir 2 can yüklenerek olacak.

Yani 20 > 50 değil
Bu şekilde 20 > 1sn sonra 22 > 1sn sonra 24 > 1sn sonra 26 > 1sn sonra 28 > 1sn sonra 30 diye 50'ye kadar devam edecek. Kodları yazdım bu şekilde ;



Unity'de çalıştırıp Public int değerini 20 yaptığım zaman direk patır patır 1 saniyede resimdeki gibi konsolda gözüküyor. Halbuki 2 can değerlerini 1'er saniye ara ile artırarak yapması lazım.

Eki Görüntüle 1189035
Test etmedim ama benzer mantıkta ilerleyebilirsin, kodunun çalışmama sebebi while döngüsü kullanıyor olman, yani her döngü saniyede bir kere çalışmıyor, o döngüyü o anda tamamlıyor ve can aniden artmış gibi oluyor

1634225562618.png
 

Geri
Yukarı