Unity "nullreferenceexception" hatası

xxecexx

Femtopat
Katılım
15 Nisan 2023
Mesajlar
12
Daha fazla  
Cinsiyet
Kadın
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();
}
}


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
 

Geri
Yukarı