• 09-06-2020, 12:32:02
    #1
    Selamun aleykum, yine takıldığım bir nokta var kaç gündür uğraşıyorum. Bir progress bar var (slider) bunun değerini yumuşakça artırmak istiyorum. Pat pat diye değil de pürüzsüzce artmalı.

    Mathf.lerp istediğim gibi çalışmıyor nedense. En basit haliyle istediğim şu, A sayısına B sayısını eklicem ve pat diye aniden değil de tek tek artarak hızlıca gidecek.

    Ayrıca bu işlemleri mümkünse upload dışında halletmem lazım.

    Netteki bütün videoları tek tek denedim. Projeye adapte edemiyorum bir yerden patlak veriyor sürekli. O yüzden yukarıdaki iki meseleyi nasıl çözebilirim?


    Edit: konuyu basitleştirmek adına. 0 sayısını yumuşak şekilde 75 sayısına kadar artırmak istiyorum. Tabi bunu float değil de int olarak yapmam gerekiyor. Neyi neyle carpmam gerekiyor anlamış değilim.

    Mathf.Lerp(0,75, 2f* Time.deltaTime);

    Burada eksik olan nedir? 75 i float yapıp sonucu inte dönüştürucem galiba da. Ama bu kodu aynen yazarsam sayı bir yerde sabit kalıyor artmıyor
  • 09-06-2020, 12:35:42
    #2
    Merhabalar,

    Sayısını arttıracağınız değişkeni time.deltatime ile çarpmayı deneyin. Zamana bağlı olarak artacaktır. Ayrıca progres bar artışı yapıyorsanız, youtube da bununla ilgili çok güzel temiz kaynaklar mevcut. Biraz daha detaylı araştırmanızı öneririm.


    Iyi forumlar.
  • 09-06-2020, 12:42:26
    #3
    Hocam smooting ve lerping işlemleri yalnızca update methodu içinde çalışır, update kullanmayacaksan da iterator kullanman gerekiyor IEnumerator araştırmanı tavsiye ederim.
  • 09-06-2020, 12:56:34
    #4
    Orkuneka adlı üyeden alıntı: mesajı görüntüle
    Merhabalar,

    Sayısını arttıracağınız değişkeni time.deltatime ile çarpmayı deneyin. Zamana bağlı olarak artacaktır. Ayrıca progres bar artışı yapıyorsanız, youtube da bununla ilgili çok güzel temiz kaynaklar mevcut. Biraz daha detaylı araştırmanızı öneririm.


    Iyi forumlar.
    Hocam bütün videoları tek tek denedim günlerdir. Tam olarak istediğim sonucu vermiyor. Time.deltatime ile çarpıyorum sayı 0 dan 100 e gelsin şeklinde yaptım testleri. 4-5 arasında gidip geliyor mesela. Kodu birebir yazsam bile olmuyor. Oyunda kullanacağım mantık biraz daha farklı o yüzden işin özünü kavrayamadim.

    Nmx adlı üyeden alıntı: mesajı görüntüle
    Hocam smooting ve lerping işlemleri yalnızca update methodu içinde çalışır, update kullanmayacaksan da iterator kullanman gerekiyor IEnumerator araştırmanı tavsiye ederim.
    İenumerator e de bakıyorum hocam bir kaç gündür ama performans için tavsiye edilmiyor. Update içinde calistiramadim o yüzden o aşamaya daha gecemedim.

    Sistem level atlama üzerine olacak.exp eklenince Bar yavaşça dolacak exp fazlaysa level atlayıp slider başa dönecek. Çok fazla kontrol var işler karıştı biraz. Ama yumuşak artış bir türlü olmuyor sabit bir iki sayıda dönüp duruyor
  • 09-06-2020, 13:03:40
    #5
    mfa95 adlı üyeden alıntı: mesajı görüntüle
    Hocam bütün videoları tek tek denedim günlerdir. Tam olarak istediğim sonucu vermiyor. Time.deltatime ile çarpıyorum sayı 0 dan 100 e gelsin şeklinde yaptım testleri. 4-5 arasında gidip geliyor mesela. Kodu birebir yazsam bile olmuyor. Oyunda kullanacağım mantık biraz daha farklı o yüzden işin özünü kavrayamadim.


    İenumerator e de bakıyorum hocam bir kaç gündür ama performans için tavsiye edilmiyor. Update içinde calistiramadim o yüzden o aşamaya daha gecemedim.

    Sistem level atlama üzerine olacak.exp eklenince Bar yavaşça dolacak exp fazlaysa level atlayıp slider başa dönecek. Çok fazla kontrol var işler karıştı biraz. Ama yumuşak artış bir türlü olmuyor sabit bir iki sayıda dönüp duruyor
    ienumarator işinizi görür. Exp. eklendiği yerde bar hareketi için başlatma komutu vereceksiniz.
    İşlem tamamlanınca başlatma komutununu durduracaksınız.
  • 09-06-2020, 13:10:31
    #6
    Seyit25 adlı üyeden alıntı: mesajı görüntüle
    ienumarator işinizi görür. Exp. eklendiği yerde bar hareketi için başlatma komutu vereceksiniz.
    İşlem tamamlanınca başlatma komutununu durduracaksınız.
    Yumuşak artırmayı cozunce tekrar denicem inslalah hocam.

    Mesela 2 int değişkenim var.

    Matfh.Lerp(0,75,2f *Time.deltaTime);

    0 dan 75 e yumuşak bir şekilde artsın istiyorum. Ayrıca float değil int olmalı çünkü floatta tam oturmuyor.

    Bunu en akıllıca şekilde nasıl yapabilirim? Ne eksik anlamadım. Yabancı videolarda zamanla çarpıp bölüp bir şeyler yapıyorlar da mantığı oturmadı
  • 09-06-2020, 13:43:35
    #7
    deneme bir gameobject;
    a=0;
    b=75;
    bool bar_doldur=false;
    void Update () {

    if (bar_doldur){
    a =Mathf.Round(Mathf.Lerp(a, b, 3f*Time.deltaTime));
    deneme.GetComponent<RectTransform>().SetSizeWithCu rrentAnchors(RectTransform.Axis.Horizontal, a);
    if (a >=72) {
    a = 75;
    bar_doldur=false;}
    }
    }

    round değerinizi tamsayıya yuvarlar.
    tam 75 yapmak için if koyarsınız örneğin.
    bir değişkenle kodunuzu sürekli çalıştırmazsınız(bar_doldur gibi)
    Kısaca böyle birşey yapabilirsiniz.
  • 09-06-2020, 13:52:11
    #8
    Seyit25 adlı üyeden alıntı: mesajı görüntüle
    deneme bir gameobject;
    a=0;
    b=75;
    bool bar_doldur=false;
    void Update () {

    if (bar_doldur){
    a =Mathf.Round(Mathf.Lerp(a, b, 3f*Time.deltaTime));
    deneme.GetComponent<RectTransform>().SetSizeWithCu rrentAnchors(RectTransform.Axis.Horizontal, a);
    if (a >=72) {
    a = 75;
    bar_doldur=false;}
    }
    }

    round değerinizi tamsayıya yuvarlar.
    tam 75 yapmak için if koyarsınız örneğin.
    bir değişkenle kodunuzu sürekli çalıştırmazsınız(bar_doldur gibi)
    Kısaca böyle birşey yapabilirsiniz.
    Hocam işte buna benzer kodlar deniyordum hep. Ama mesela sizin verdiğiniz örnekte. 0 dan 75 e kadar çık diyoruz. Ama a 70 olunca duruyor 75 olmuyor. Buradaki sorun nedir
  • 09-06-2020, 14:13:53
    #9
    lerp in hesaplanması ile ilgili sanırım. son hesaplamada a=72 oluyor.
    72* 0.05 (3f*timedelta dan gelen değer yaklaşık 0.05 gibi)=3,6
    72+3,6=75,6 75 den büyük olduğu için.
    lerp in formülüne bakabilirsiniz detaylı bir şekilde.