Unity "nullreferenceexception" hatası

651146

Decapat
Katılım
15 Nisan 2023
Mesajlar
13
Aşağıdaki hatayı çözemiyorum, yardımcı olursanız sevinirim:
Nullreferenceexception: Object reference not set to an instance of an object.
Quiz. Update () (at Assets/scripts/quiz.cs:25)
Scriptler:
C#:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class timer : MonoBehaviour
{
    [SerializeField] float isAnsweringTime = 30f;
    [SerializeField] float showingthetruth = 10f;
    public bool isAnswering = true;
    public bool timeovernotanswered = false;
    float timervalue;
    public bool load  = false;
    quiz quizscript;
    public float picoftimer = 1f;
    void Update()
    {
        timerupdate();
    }

    private void Start() {
        timervalue = isAnsweringTime;
        quizscript = FindObjectOfType<quiz>();

    }
    public void CancelTimer()
    {
        timervalue = 0;
    }
    void timerupdate()
    {
        timervalue -= Time.deltaTime;
       
        if (isAnswering==true)
        {
            if (timervalue <= 0)
            {
                isAnswering = false;
                timervalue = showingthetruth;
                Debug.Log("cevaplama süresi doldu");
                if (quizscript.notAnswered)
                {
                    timeovernotanswered = true;
                }
            }
            else
            {
                picoftimer = timervalue/isAnsweringTime;
            }
           
        }
       
        if (isAnswering==false)
        {
            if(timervalue <= 0)
            {
                isAnswering = true;
                timervalue = isAnsweringTime;
                Debug.Log("bekleme süresi doldu");
                load = true;
            }
            else
            {
                picoftimer = timervalue/showingthetruth;
            }
           
        }

    }
}

Kod:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.UI;
public class quiz : MonoBehaviour
{
    [SerializeField] TextMeshProUGUI Qtext;
    [SerializeField] question Question;
    [SerializeField] GameObject[] buttons;
    [SerializeField] Sprite afterimage;
    [SerializeField] Sprite defaultimage;
    [SerializeField] Image timerimage;
    timer Timer;
    public bool notAnswered = true;
    bool buttonBool;
    void Start()
    {
        Timer = FindObjectOfType<timer>();
        display();
    }

   
    private void Update() {
        timerimage.fillAmount = Timer.picoftimer;
        if (Timer.load)
        {
            display();
            Timer.load = false;
        }
        if (Timer.timeovernotanswered)
        {
            showanswer(-1);
            Timer.timeovernotanswered = false;
        }
    }

    void display()
    {
        notAnswered = true;
        setdefaultbuttonsprites();
        Qtext.text = Question.GetQ();
       
        for(int i = 0;i<buttons.Length;i++)
        {
            TextMeshProUGUI buttontext = buttons[i].GetComponentInChildren<TextMeshProUGUI>();
            buttontext.text = Question.GetAnswer(i);
        }
        setbuttonstate(true);
    }
    void setdefaultbuttonsprites()
    {
        for(int i = 0;i<buttons.Length;i++)
        {
            Image buttonimage = buttons[i].GetComponent<Image>();
            buttonimage.sprite = defaultimage;
        }
    }
    void setbuttonstate(bool buttonBool)
    {
        for(int i = 0;i<buttons.Length;i++)
        {
            Button button = buttons[i].GetComponent<Button>();
            button.interactable = buttonBool;
        }
       
    }
    void showanswer(int index)
    {
       
        notAnswered = false;
        Timer.timeovernotanswered = false;
        if (index == Question.GetCorrect())
        {
            Qtext.text = "Doğru!";
            Image before_image = buttons[index].GetComponent<Image>();
            before_image.sprite = afterimage;
           
        }
        else
        {
            Qtext.text =   "Doğru Cevap:\n"+Question.GetAnswer(Question.GetCorrect());
            Image before_image = buttons[Question.GetCorrect()].GetComponent<Image>();
            before_image.sprite = afterimage;

        }
        setbuttonstate(false);
   
    }
    public void OnAnswerSelected(int index)
    {
        notAnswered = false;
        Timer.timeovernotanswered = false;
        if (index == Question.GetCorrect())
        {
            Qtext.text = "Doğru!";
            Image before_image = buttons[index].GetComponent<Image>();
            before_image.sprite = afterimage;
           
        }
        else
        {
            Qtext.text =   "Doğru Cevap:\n"+Question.GetAnswer(Question.GetCorrect());
            Image before_image = buttons[Question.GetCorrect()].GetComponent<Image>();
            before_image.sprite = afterimage;

        }
        setbuttonstate(false);
        Timer.CancelTimer();
    }
   
}
 
C#:
    timer Timer;
    public bool notAnswered = true;
    bool buttonBool;
    void Start()
    {
        Timer = FindObjectOfType<timer>();
        display();
    }
Bu kısım onu sağlamıyor mu?
 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using TMPro;
using UnityEngine.UI;

public class timer : MonoBehaviour
{
[SerializeField] float isAnsweringTime = 30f;
[SerializeField] float showingthetruth = 10f;
public bool isAnswering = true;
public bool timeovernotanswered = false;
float timervalue;
public bool load = false;
quiz quizscript;
public float picoftimer = 1f;

private void Start()
{
timervalue = isAnsweringTime;
quizscript = FindObjectOfType<quiz>();
}

public void CancelTimer()
{
timervalue = 0;
}

void Update()
{
timervalue -= Time.deltaTime;

if (isAnswering)
{
if (timervalue <= 0)
{
isAnswering = false;
timervalue = showingthetruth;
Debug.Log("cevaplama süresi doldu");
if (quizscript.notAnswered)
{
timeovernotanswered = true;
}
}
else
{
picoftimer = timervalue / isAnsweringTime;
}
}

if (!isAnswering)
{
if (timervalue <= 0)
{
isAnswering = true;
timervalue = isAnsweringTime;
Debug.Log("bekleme süresi doldu");
load = true;
}
else
{
picoftimer = timervalue / showingthetruth;
}
}
}
}

public class quiz : MonoBehaviour
{
[SerializeField] TextMeshProUGUI Qtext;
[SerializeField] question Question;
[SerializeField] GameObject[] buttons;
[SerializeField] Sprite afterimage;
[SerializeField] Sprite defaultimage;
[SerializeField] Image timerimage;
timer Timer;
public bool notAnswered = true;
bool buttonBool;

void Start()
{
Timer = FindObjectOfType<timer>();
display();
}

private void Update()
{
timerimage.fillAmount = Timer.picoftimer;
if (Timer.load)
{
display();
Timer.load = false;
}
if (Timer.timeovernotanswered)
{
showanswer(-1);
Timer.timeovernotanswered = false;
}
}

void display()
{
notAnswered = true;
setdefaultbuttonsprites();
Qtext.text = Question.GetQ();

for (int i = 0; i < buttons.Length; i++)
{
TextMeshProUGUI buttontext = buttons.GetComponentInChildren<TextMeshProUGUI>();
buttontext.text = Question.GetAnswer(i);
}
setbuttonstate(true);
}

void setdefaultbuttonsprites()
{
for (int i = 0; i < buttons.Length; i++)
{
Image buttonimage = buttons.GetComponent<Image>();
buttonimage.sprite = defaultimage;
}
}

void setbuttonstate(bool buttonBool)
{
for (int i = 0; i < buttons.Length; i++)
{
Button button = buttons.GetComponent<Button>();
button.interactable = buttonBool;
}
}

void showanswer(int index)
{
notAnswered = false;
Timer.timeovernotanswered = false;
if (index == Question.GetCorrect())
{
Qtext.text = "Doğru!";
Image before_image = buttons[index].GetComponent<Image>();
before_image.sprite = afterimage;
}
else
{
Qtext.text = "Doğru Cevap:\n" + Question.GetAnswer(Question.GetCorrect());
Image before_image = buttons[Question.GetCorrect()].GetComponent<Image>();
before_image.sprite = afterimage;
}
setbuttonstate(false);
}

public void OnAnswerSelected(int index)
{
notAnswered = false;
Timer.timeovernotanswered = false;
if (index == Question.GetCorrect())
{
Qtext.text = "Doğru!";
Image before_image = buttons[index].GetComponent<Image>();
before_image.sprite = afterimage;
}
else
{
Qtext.text = "Doğru Cevap:\n" + Question.GetAnswer(Question.GetCorrect());
Image before_image = buttons[Question.GetCorrect()].GetComponent<Image>();
before_image.sprite = afterimage;
}
setbuttonstate(false);
Timer.CancelTimer();
}
}


Bu şekilde düzelmiş olması gerekiyor. Test edemiyorum ama sorun yok gibi gözüküyor
 

Bu konuyu görüntüleyen kullanıcılar

Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için çerezleri kabul etmelisiniz. Daha Fazlasını Öğren.…