İçeriğe geç
ShiftDelete.Net
Haber ara/ SDN'ye SorGiriş
Haber Akışı SDNTV İnceleme Forum Yapay Zeka Akıllı Telefon Elektrikli Otomobil Oyun ShiftDelete.Net Global Teknoloji Haberleri Mobil Otomobil Donanım Savunma Bilim Sosyal Medya İnternet Giyilebilir Teknoloji Rehber Ürünler Son dakika Yazarlar
  1. Ana sayfa
  2. Topluluk
  3. Soru / Cevap
Soru / Cevap

Unity’de yaşadığım sorun

ColosusYEB20.07.202320 cevap2.049 görüntüleme
#1
Şöyle bir kodum var:
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?
düzenlendi
Cevaplar
neptün yüksel
#2
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 Konuyu açan
#3
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.
👍 1
neptün yüksel
#4
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;
bool tiklandiMi = false;
public void tikla()
{
    tiklandi = true;
    if(tiklandi)
    {
        puan --;
        tiklandi = false;
    }
}
ColosusYEB Konuyu açan
#5
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;
bool tiklandiMi = false;
public void tikla()
{
    tiklandi = true;
    if(tiklandi)
    {
        puan --;
        tiklandi = false;
    }
}
Bunu nereye koyacağız?
neptün yüksel
#6
Bunu nereye koyacağız?
bool tiklandi değişkeni sınıfın altına ekle.
public class script : MonoBehaviour

{

    private int apuani;
    bool tikalndiMi = false;


Her buton eventini de böyle güncelle.

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

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

    }
#7
Ö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.
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.
👍 1
ColosusYEB Konuyu açan
#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.
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.
#9
Puanları TextMeshPro dan çekip işlem yapmayı dener misiniz?
👍 1
ColosusYEB Konuyu açan
#10
Puanları TextMeshPro dan çekip işlem yapmayı dener misiniz?
TMP kullanmayınca bir kere oluyor gir çık yapınca olmuyor.
👍 1
#11
Hayır demek istediğim o değil. Artırılacak veya eksiltilecek değeri Tmp den çekip üzerinde işlem yapmak.
TMP kullanmayınca bir kere oluyor gir çık yapınca olmuyor.
ColosusYEB Konuyu açan
#12
Hayır demek istediğim o değil. Artırılacak veya eksiltilecek değeri Tmp den çekip üzerinde işlem yapmak.
Ben yeni yeni bu işe girişiyorum kusura bakmayın da tmp den çekmek ne oluyor?
neptün yüksel
#13
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.
#14
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 Konuyu açan
#15
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?
#16
Hayır kendi kodunuzda TMP ye değer vermek yerine ondan değer alacaksınız.
TMP kısmına gelip edit script kısmı var oradan mı yapacağım?
ColosusYEB Konuyu açan
#17
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?
#18
Bunu denemenizi kastetmiştim.
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 Konuyu açan
#19
Bunu denemenizi kastetmiştim.
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
#20
İş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.
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;
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;
int yeniPara = getPara(); // şeklinde bir değişkene aktarılabilir.
düzenlendi
#21
İş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.

Cevabını yaz

Cevap yazmak için giriş yap ya da üye ol. Eski forum kullanıcı adın ve parolanla girebilirsin.