Yardım Unity’de yaşadığım sorun

Bu konuyu okuyanlar

ColosusYEB

Öğrenci
Katılım
10 Şubat 2023
Mesajlar
55
Çözümler
1
Reaksiyon puanı
11
Puanları
8
Şöyle bir kodum var:
C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class script : MonoBehaviour
{
    private int apuani;
    public TextMeshProUGUI apuaniText;
    private int bpuani;
    public TextMeshProUGUI bpuaniText;

    void Start()
    {
        apuani = 50;
        bpuani = 50;       
    }
    void Update()
    {
    }
    public void BastınUc()
    {
        bpuani = bpuani + 3;
        bpuaniText.text = bpuani + "";

        apuani = apuani - 3;
        apuaniText.text = apuani + "";
    }

    public void BastınOn()
    {   
        bpuani = bpuani + 10;
        bpuaniText.text = bpuani + "";

        apuani = apuani - 10;
        apuaniText.text = apuani + "";
    }

    public void BastınOtuz()
    {
        bpuani = bpuani + 30;
        bpuaniText.text = bpuani + "";

        apuani = apuani - 30;
        apuaniText.text = apuani + "";
    }
}



Bu kod her butona 1 void düşmek üzere 3 butona bağlı. Burada butona bastığımızda puan türlerini voide göre arttırıp azaltıyor.

Fakat burada şöyle bir sıkıntı var. A ve B puanları 50şer tane. BastınÜç butonuna basınca 53 ve 47 oluyor. Fakat sonrasında BastınOn butonuna basınca bu sefer 63 ve 37 olmak yerine 60 ve 40 oluyor. Kısacası her butona bastığımda değerler kendisini 50 ye eşitleyip ona göre hesap yapıyor. Bu sorunun çözümü nedir?
 
Son düzenleyen moderatör:

neptün yüksel

Asistan
Cezalı
Katılım
5 Haziran 2023
Mesajlar
257
Reaksiyon puanı
100
Puanları
43
Yaş
23
C#:
using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using TMPro;



public class script : MonoBehaviour

{

    private int apuani;
    public TextMeshProUGUI apuaniText;
    private int bpuani;
    public TextMeshProUGUI bpuaniText;

    // Start is called before the first frame update

    void Start()
    {

        apuani = 50;
        bpuani = 50;
    }

    // Update is called once per frame

    void Update()
    {
   
    }





    public void BastınUc()
    {

            bpuani = bpuani + 3;
            bpuaniText.text = bpuani + "";

            apuani = apuani - 3;
            apuaniText.text = apuani + "";

    }


    public void BastınOn()
    {
        bpuani = bpuani + 10;
        bpuaniText.text = bpuani + "";

        apuani = apuani - 10;
        apuaniText.text = apuani + "";

    }



    public void BastınOtuz()

    {

        bpuani = bpuani + 30;

        bpuaniText.text = bpuani + "";



    apuani = apuani - 30;

    apuaniText.text = apuani + "";

 

    }



}
 

ColosusYEB

Öğrenci
Katılım
10 Şubat 2023
Mesajlar
55
Çözümler
1
Reaksiyon puanı
11
Puanları
8
C#:
using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using TMPro;



public class script : MonoBehaviour

{

    private int apuani;
    public TextMeshProUGUI apuaniText;
    private int bpuani;
    public TextMeshProUGUI bpuaniText;

    // Start is called before the first frame update

    void Start()
    {

        apuani = 50;
        bpuani = 50;
    }

    // Update is called once per frame

    void Update()
    {
  
    }





    public void BastınUc()
    {

            bpuani = bpuani + 3;
            bpuaniText.text = bpuani + "";

            apuani = apuani - 3;
            apuaniText.text = apuani + "";

    }


    public void BastınOn()
    {
        bpuani = bpuani + 10;
        bpuaniText.text = bpuani + "";

        apuani = apuani - 10;
        apuaniText.text = apuani + "";

    }



    public void BastınOtuz()

    {

        bpuani = bpuani + 30;

        bpuaniText.text = bpuani + "";



    apuani = apuani - 30;

    apuaniText.text = apuani + "";

 

    }



}
Pek bir fark göremedim.
 

neptün yüksel

Asistan
Cezalı
Katılım
5 Haziran 2023
Mesajlar
257
Reaksiyon puanı
100
Puanları
43
Yaş
23
Pek bir fark göremedim.
Yok ben yazacaktım unuttum kb. Bazen böyle fazla kesip bırakmasının nedenin ortalama 7 karelik bir update döngüsüne kaptılması. Ben de de oluyordu.

Bir olay için şöyle yapılabilr;
C#:
bool tiklandiMi = false;
public void tikla()
{
    tiklandi = true;
    if(tiklandi)
    {
        puan --;
        tiklandi = false;
    }
}
 

ColosusYEB

Öğrenci
Katılım
10 Şubat 2023
Mesajlar
55
Çözümler
1
Reaksiyon puanı
11
Puanları
8
Yok ben yazacaktım unuttum kb. Bazen böyle fazla kesip bırakmasının nedenin ortalama 7 karelik bir update döngüsüne kaptılması. Ben de de oluyordu.

Bir olay için şöyle yapılabilr;
C#:
bool tiklandiMi = false;
public void tikla()
{
    tiklandi = true;
    if(tiklandi)
    {
        puan --;
        tiklandi = false;
    }
}
Bunu nereye koyacağız?
 

neptün yüksel

Asistan
Cezalı
Katılım
5 Haziran 2023
Mesajlar
257
Reaksiyon puanı
100
Puanları
43
Yaş
23
Bunu nereye koyacağız?
bool tiklandi değişkeni sınıfın altına ekle.
C#:
public class script : MonoBehaviour

{

    private int apuani;
    bool tikalndiMi = false;


Her buton eventini de böyle güncelle.


Örnek;
C#:
 public void BastinUc()
    {
            if(tiklandiMi)
            {
                 bpuani = bpuani + 3;
                bpuaniText.text = bpuani + "";

                apuani = apuani - 3;
                apuaniText.text = apuani + "";
            }
        

    }
 

Emnn

Jet Sesi, Özgürlüğün Sesidir!
Emektar
Katılım
3 Mayıs 2021
Mesajlar
2,207
Çözümler
8
Reaksiyon puanı
1,848
Puanları
113
Öncelikle hatırladığım kadarıyla siz butona her bastığınızda start() fonksiyonu çalışır. Siz değişkenleri start fonksiyonunda 50 ye eşitlediğiniz için her bastığınızda 50 ye göre işlem yapılır. Bunu çözmek için değerler start fonksiyonunda verilmez.


C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;


public class script : MonoBehaviour

{
    private int apuani = 50;
    public TextMeshProUGUI apuaniText;
    private int bpuani = 50;
    public TextMeshProUGUI bpuaniText;

    public void BastınUc()
    {

            bpuani = bpuani + 3;
            bpuaniText.text = bpuani + "";

            apuani = apuani - 3;
            apuaniText.text = apuani + "";

    }
    public void BastınOn()
    {
        bpuani = bpuani + 10;
        bpuaniText.text = bpuani + "";

        apuani = apuani - 10;
        apuaniText.text = apuani + "";

    }
    public void BastınOtuz()
    {
        bpuani = bpuani + 30;
        bpuaniText.text = bpuani + "";
        apuani = apuani - 30;
        apuaniText.text = apuani + "";

    }
}

Kode denedikten sonra geri dönüş sağlarsanız sevinirim.
 

ColosusYEB

Öğrenci
Katılım
10 Şubat 2023
Mesajlar
55
Çözümler
1
Reaksiyon puanı
11
Puanları
8
Öncelikle hatırladığım kadarıyla siz butona her bastığınızda start() fonksiyonu çalışır. Siz değişkenleri start fonksiyonunda 50 ye eşitlediğiniz için her bastığınızda 50 ye göre işlem yapılır. Bunu çözmek için değerler start fonksiyonunda verilmez.


C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;


public class script : MonoBehaviour

{
    private int apuani = 50;
    public TextMeshProUGUI apuaniText;
    private int bpuani = 50;
    public TextMeshProUGUI bpuaniText;

    public void BastınUc()
    {

            bpuani = bpuani + 3;
            bpuaniText.text = bpuani + "";

            apuani = apuani - 3;
            apuaniText.text = apuani + "";

    }
    public void BastınOn()
    {
        bpuani = bpuani + 10;
        bpuaniText.text = bpuani + "";

        apuani = apuani - 10;
        apuaniText.text = apuani + "";

    }
    public void BastınOtuz()
    {
        bpuani = bpuani + 30;
        bpuaniText.text = bpuani + "";
        apuani = apuani - 30;
        apuaniText.text = apuani + "";

    }
}

Kode denedikten sonra geri dönüş sağlarsanız sevinirim.
Denedim, yine aynı oldu.
 

neptün yüksel

Asistan
Cezalı
Katılım
5 Haziran 2023
Mesajlar
257
Reaksiyon puanı
100
Puanları
43
Yaş
23
Ben yeni yeni bu işe girişiyorum kusura bakmayın da tmp den çekmek ne oluyor?
TextMeshPro nesnesi demek. Oyunda Canvas'a yada sahneye TexthMeshPRO objesi eklersen ondan objeden verilerin objelerine erişmen gerekir.

Bir sahneye Text Mesh Pro eklersen, aslında bir obje yerleştirir ve objenin comoponenti olarak TextMeshPro eklenir.
 

Emnn

Jet Sesi, Özgürlüğün Sesidir!
Emektar
Katılım
3 Mayıs 2021
Mesajlar
2,207
Çözümler
8
Reaksiyon puanı
1,848
Puanları
113
Ben yeni yeni bu işe girişiyorum kusura bakmayın da tmp den çekmek ne oluyor?
Demek istediğim şu C# da değişkenlerden veri çekmek(get) ve veri atamak(set) işlemlerini biliyorsunuzdur. Değer artırma veya azaltma işlemi yapacağınız için TextMeshPro'dan üzerinde yazan veriyi çekip ona artırma veya eksiltme işlemi yapmak.
 

ColosusYEB

Öğrenci
Katılım
10 Şubat 2023
Mesajlar
55
Çözümler
1
Reaksiyon puanı
11
Puanları
8
Demek istediğim şu C# da değişkenlerden veri çekmek(get) ve veri atamak(set) işlemlerini biliyorsunuzdur. Değer artırma veya azaltma işlemi yapacağınız için TextMeshPro'dan üzerinde yazan veriyi çekip ona artırma veya eksiltme işlemi yapmak.
TMP kısmına gelip edit script kısmı var oradan mı yapacağım?
 

ColosusYEB

Öğrenci
Katılım
10 Şubat 2023
Mesajlar
55
Çözümler
1
Reaksiyon puanı
11
Puanları
8
C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;


public class script : MonoBehaviour

{
    private int apuani = 50;
    public TextMeshProUGUI apuaniText;
    private int bpuani = 50;
    public TextMeshProUGUI bpuaniText;
    
    public int A puanı
    {
      get
      {
            return apuani;
      }

        set
        {
            apuani = value;
        }
    }


    public int B puanı
    {
        get
        {
            return bpuani;
        }


        set
        {
            bpuani = value;
        }

    }
    
    
    
        

    public void BastınUc()
    {

            bpuani = bpuani + 3;
            bpuaniText.text = bpuani + "";

            apuani = apuani - 3;
            apuaniText.text = apuani + "";

    }
    public void BastınOn()
    {
        bpuani = bpuani + 10;
        bpuaniText.text = bpuani + "";

        apuani = apuani - 10;
        apuaniText.text = apuani + "";

    }
    public void BastınOtuz()
    {
        bpuani = bpuani + 30;
        bpuaniText.text = bpuani + "";
        apuani = apuani - 30;
        apuaniText.text = apuani + "";

    }
}



Böyle yaptım yapacağım başka ne var?
 

Emnn

Jet Sesi, Özgürlüğün Sesidir!
Emektar
Katılım
3 Mayıs 2021
Mesajlar
2,207
Çözümler
8
Reaksiyon puanı
1,848
Puanları
113
Bunu denemenizi kastetmiştim.

C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class script : MonoBehaviour
{
    private int apuani = 50;
    public TextMeshProUGUI apuaniText;
    private int bpuani = 50;
    public TextMeshProUGUI bpuaniText;
    
      
    public void BastınUc()
    {
        bpuaniText.text = (int.Parse(bpuaniText.text) + 3).ToString();
        apuaniText.text = (int.Parse(apuaniText.text) - 3).ToString();
    }
    
    public void BastınOn()
    {
        bpuaniText.text = (int.Parse(bpuaniText.text) + 10).ToString();
        apuaniText.text = (int.Parse(apuaniText.text) - 10).ToString();
    }
    
    public void BastınOtuz()
    {
        bpuaniText.text = (int.Parse(bpuaniText.text) + 30).ToString();
        apuaniText.text = (int.Parse(apuaniText.text) - 30).ToString();
    }
}
 

ColosusYEB

Öğrenci
Katılım
10 Şubat 2023
Mesajlar
55
Çözümler
1
Reaksiyon puanı
11
Puanları
8
Bunu denemenizi kastetmiştim.

C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;

public class script : MonoBehaviour
{
    private int apuani = 50;
    public TextMeshProUGUI apuaniText;
    private int bpuani = 50;
    public TextMeshProUGUI bpuaniText;
   
     
    public void BastınUc()
    {
        bpuaniText.text = (int.Parse(bpuaniText.text) + 3).ToString();
        apuaniText.text = (int.Parse(apuaniText.text) - 3).ToString();
    }
   
    public void BastınOn()
    {
        bpuaniText.text = (int.Parse(bpuaniText.text) + 10).ToString();
        apuaniText.text = (int.Parse(apuaniText.text) - 10).ToString();
    }
   
    public void BastınOtuz()
    {
        bpuaniText.text = (int.Parse(bpuaniText.text) + 30).ToString();
        apuaniText.text = (int.Parse(apuaniText.text) - 30).ToString();
    }
}
İşe yaradı, teşekkür ederim fakat bir sorum olacak: Yukarıda get ve set komutlarından bahsettiniz fakat burada hiç kullanmadınız o neden oluyor?
 

neptün yüksel

Asistan
Cezalı
Katılım
5 Haziran 2023
Mesajlar
257
Reaksiyon puanı
100
Puanları
43
Yaş
23
İşe yaradı, teşekkür ederim fakat bir sorum olacak: Yukarıda get ve set komutlarından bahsettiniz fakat burada hiç kullanmadınız o neden oluyor?
Sen kullan. Get Set kapsülleme ve veri güvenliği için kullanılır.
Herhangi bir değişken üzerinden örnek vermek gerekirse;

(Bu şekildede kullanılır)
Bu kodda mesela para değerinin negatif olmasını önledik.
C#:
private int para;

public int getPara()
{
    if(para<0){
        return 0;
    }else{
        return para;
    }
}


public void setPara(int _para)
{
    para = _para
}


Bu kodda ise kapsülleme yapıp, bir kullanıcının bir çok değerine ulaştık;
C#:
private String ad;
private String soyad;
private int yas;

public String getBilgi()
{
    return $"Kullanıcının adı: {ad}, soyadı: {soyad}, yaşı: {yas}";
    // yada return "Kullanıcı adı: " + ad + "soyadı: " + soyad + "yaşı: " + yas.ToString();
}

Kısaca return olarak ifade edilenler bir değişken yada nesne zaten;
C#:
int yeniPara = getPara(); // şeklinde bir değişkene aktarılabilir.
 
Son düzenleme:

Emnn

Jet Sesi, Özgürlüğün Sesidir!
Emektar
Katılım
3 Mayıs 2021
Mesajlar
2,207
Çözümler
8
Reaksiyon puanı
1,848
Puanları
113
İşe yaradı, teşekkür ederim fakat bir sorum olacak: Yukarıda get ve set komutlarından bahsettiniz fakat burada hiç kullanmadınız o neden oluyor?
Bir Class kullanmadığım için get-set kullanmaya ihtiyaç duymadım. Get ve Set methodları daha çok Nesne Yönelimli Programlama yaparken kullanılır. Kastettiğim "get" olayı TextMeshProdan veriyi almak için "get" ifadesini kullandım. Yardımcı olabildiysem çözüm olarak işaretliyebilirsiniz.
 

Son mesajlar

Üst