Unity'de 'System.Threading.Timer' parametre hatası

Katılım
4 Mayıs 2021
Mesajlar
16
Daha fazla  
Cinsiyet
Erkek
'System. Threading. Timer' türü, 'Object.FindObjectOfType<T>()' genel türü veya yöntemi için 'T' tür parametresi olarak kullanılamaz. 'System.Threading.Timer' türünden 'UnityEngine.Object' türüne örtük bir başvuru dönüştürmesi yoktur.CS0311

Kelime oyunum için Visual Studio Code da kod yazarken böyle bir hata alıyorum çözebilecek var mı?
 

Kodu tahmin mi etmem gerekiyor? Kodu da paylaşır mısın?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.UI;
using System.Threading;
public class Test : MonoBehaviour
{
[Header("Sorular")]
[SerializeField] TextMeshProUGUI sorumetni;
[SerializeField] Soru soru;

[Header("Cevaplar")]
[SerializeField] GameObject[] cevapdugmeleri;
int dogrucevapindeksi;
[Header("Buton Renkleri")]
[SerializeField] Sprite varsayilanCevapSprite;
[SerializeField] Sprite dogruCevapSprite;
[Header("Zamanlayıcı")]
[SerializeField] Image zamanlayiciresmi;
Timer timer;
public void Start()
{
timer = FindObjectOfType<Timer>();
sonrakisoruyugetir();
//EkranSorusu();
}
public void Update()
{
zamanlayiciresmi.fillAmount = timer.
}
public void cevapseciliyken(int index)
{
Image butonresmi;
if(index == soru.GetDogrucevapindeksi())
{
sorumetni.text = "Doğru!";
butonresmi = cevapdugmeleri[index].GetComponent<Image>();
butonresmi.sprite = dogruCevapSprite;
}else
{
dogrucevapindeksi = soru.GetDogrucevapindeksi();
string dogrucevap = soru.GetCevap(dogrucevapindeksi);
sorumetni.text =" Üzgünüm, dogru cevap;\n " + dogrucevap;
butonresmi = cevapdugmeleri[dogrucevapindeksi].GetComponent<Image>();
butonresmi.sprite = dogruCevapSprite;
}
dugmedurumunuayarla(false);
}
void sonrakisoruyugetir()
{
dugmedurumunuayarla(true);
varsayilanbutonSprites();
EkranSorusu();
}
void EkranSorusu()
{
sorumetni.text = soru.GetQuestion();
for(int i = 0;i < cevapdugmeleri.Length; i++)
{
TextMeshProUGUI testbutonu = cevapdugmeleri.GetComponentInChildren<TextMeshProUGUI>();
testbutonu.text = soru.GetCevap(i);
}
}
void dugmedurumunuayarla(bool state)
{
for(int i = 0;i < cevapdugmeleri.Length; i++)
{
Button buton = cevapdugmeleri.GetComponent<Button>();
buton.interactable = state;
}
}
void varsayilanbutonSprites()
{
for(int i = 0;i < cevapdugmeleri.Length; i++)
{
Image butonresmi = cevapdugmeleri.GetComponent<Image>();
butonresmi.sprite = varsayilanCevapSprite;
}
}
}


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.UI;
using System.Threading;
public class Test : MonoBehaviour
{
[Header("Sorular")]
[SerializeField] TextMeshProUGUI sorumetni;
[SerializeField] Soru soru;

[Header("Cevaplar")]
[SerializeField] GameObject[] cevapdugmeleri;
int dogrucevapindeksi;
[Header("Buton Renkleri")]
[SerializeField] Sprite varsayilanCevapSprite;
[SerializeField] Sprite dogruCevapSprite;
[Header("Zamanlayıcı")]
[SerializeField] Image zamanlayiciresmi;
Timer timer;
public void Start()
{
timer = FindObjectOfType<Timer>();
sonrakisoruyugetir();
//EkranSorusu();
}
public void Update()
{
zamanlayiciresmi.fillAmount = timer.
}
public void cevapseciliyken(int index)
{
Image butonresmi;
if(index == soru.GetDogrucevapindeksi())
{
sorumetni.text = "Doğru!";
butonresmi = cevapdugmeleri[index].GetComponent<Image>();
butonresmi.sprite = dogruCevapSprite;
}else
{
dogrucevapindeksi = soru.GetDogrucevapindeksi();
string dogrucevap = soru.GetCevap(dogrucevapindeksi);
sorumetni.text =" Üzgünüm, dogru cevap;\n " + dogrucevap;
butonresmi = cevapdugmeleri[dogrucevapindeksi].GetComponent<Image>();
butonresmi.sprite = dogruCevapSprite;
}
dugmedurumunuayarla(false);
}
void sonrakisoruyugetir()
{
dugmedurumunuayarla(true);
varsayilanbutonSprites();
EkranSorusu();
}
void EkranSorusu()
{
sorumetni.text = soru.GetQuestion();
for(int i = 0;i < cevapdugmeleri.Length; i++)
{
TextMeshProUGUI testbutonu = cevapdugmeleri.GetComponentInChildren<TextMeshProUGUI>();
testbutonu.text = soru.GetCevap(i);
}
}
void dugmedurumunuayarla(bool state)
{
for(int i = 0;i < cevapdugmeleri.Length; i++)
{
Button buton = cevapdugmeleri.GetComponent<Button>();
buton.interactable = state;
}
}
void varsayilanbutonSprites()
{
for(int i = 0;i < cevapdugmeleri.Length; i++)
{
Image butonresmi = cevapdugmeleri.GetComponent<Image>();
butonresmi.sprite = varsayilanCevapSprite;
}
}
}
sorun bu kısımda :
Timer timer;
public void Start()
{
timer = FindObjectOfType<Timer>();
sonrakisoruyugetir();
//EkranSorusu();
}
public void Update()
{
zamanlayiciresmi.fillAmount = timer.kesriDoldur;
}
 

Bir dahaki sefere kodu kod olarak paylaş.

timer = FindObjectOfType<Timer>();
Neden FindObjectOfType kullanıyorsun? Timer'ı global olarak oluşturmuşsun zaten. Ek olarak bu kullanım desteklenmiyor. UnityEngine.Object değil ki Timer. C#'ın kendisine ait.
 

Bir dahaki sefere kodu kod olarak paylaş.


Neden FindObjectOfType kullanıyorsun? Timer'ı global olarak oluşturmuşsun zaten. Ek olarak bu kullanım desteklenmiyor. UnityEngine.Object değil ki Timer. C#'ın kendisine ait.
kursdaki hoca öyle kullanıyordu ondan öyle yazdım.
 
Kurs içeriğini bilmiyorum ama casting dene bakalım. Satırı şöyle güncelle;
C#:
timer = (Timer)FindObjectOfType<Timer>();
denedim olmadı reis

denedim olmadı reis
'Timer' bir 'kesriDoldur' tanımı içermiyor ve 'Timer' türünde bir ilk bağımsız değişken kabul eden hiçbir erişilebilir 'kesriDoldur' genişletme yöntemi bulunamadı (bir kullanma yönergeniz veya derleme başvurunuz eksik olabilir mi?)CS1061 bide şu kodda böyle bir hata çıkıyor kod:
C#:
zamanlayiciresmi.fillAmount = zamanlayici.kesriDoldur;
 
Son düzenleme:
Biraz baktım da, net bir çözüm bulamadım. Timer dışardan mı gelecek? O yüzden mi buna ihtiyacın var? Timer için bir wrapper sen yazmayi düşünebilirsin? En azından unity objecte dönüşür. Kurs içeriğini de bilmiyorum ki. Tahmin üzere yanıtlıyorum şuan.
 
Biraz baktım da, net bir çözüm bulamadım. Timer dışarıdan mı gelecek? O yüzden mi buna ihtiyacın var? Timer için bir wrapper sen yazmayi düşünebilirsin? En azından Unity objecte dönüşür. Kurs içeriğini de bilmiyorum ki. Tahmin üzere yanıtlıyorum şu an.

Filled tipi zamanlayıcım var onu scriptteki timer aracılığıyla bağlantısını kurup çalışır hale getirmeye çalışıyorum. Diğer ayarlarını yaptım bir bu kaldı bunu da yapsam geriye ne kadar soru kaldığını gösteren progress barım var onu yapacağım.

Filled tipi zamanlayıcım var onu scriptteki timer aracılığıyla bağlantısını kurup çalışır hale getirmeye çalışıyorum. Diğer ayarlarını yaptım bir bu kaldı bunu da yapsam geriye ne kadar soru kaldığını gösteren progress barım var onu yapacağım.

İki tane daha scriptim var kelime oyunu için onlara bakıyorum neden hata veriyor diye anlayamadım. Çalışmayınca insanın morali bozuluyor.
 
Son düzenleme:
Filled tipi zamanlayıcım var onu scriptteki timer aracılığıyla bağlantısını kurup çalışır hale getirmeye çalışıyorum. Diğer ayarlarını yaptım bir bu kaldı bunu da yapsam geriye ne kadar soru kaldığını gösteren progress barım var onu yapacağım.
Filled tip zamanlayıcının type'ına göre oluşturman lazım scripttede timer'ı. Proje dosyalarını atarsan bir ara indirip bakarım. Unity kurulu değil bilgisayarımda. Bilmiyorum typelar neler vs.
 

Technopat Haberler

Yeni konular

Geri
Yukarı