Object reference not set to instance for my timer and my text
I am making a game where the player has to fill up a hunger and thirst percentage level both to 100% before a 30 second timer runs out. The player has to eat either a jaguar or a plant. There are anti-jaguars in the game, which you must avoid otherwise you will fail the game if you touch the anti-jaguar. The regular jaguar gains the hunger by 20% and the plan gains the hunger by 10%. Touching a body of water gains the thirst by 20%. There are texts on the screen showing the thirst and hunger percentage and how many regular jaguars you ate. The latest thing I even added to the game was the timer and its text. Before I added the timer to the game, the game had a problem where it would start paused due to an error about the thirst text not sent to an instance of an object. Then, the game would work if I unpause it. Now the timer is giving me a problem where the game would start paused and when I continuously hit the unpause button, it won't unpause, but the timer text is showing that the time has elapsed (It's basically pausing by frame). NOTE: Jaguars are tagged as "PickUp" in this game. Here are the errors:
NullReferenceException: Object reference not set to an instance of an object CompletePlayerController.SetThirstText () (at Assets/_Completed-Assets/Scripts/CompletePlayerController.cs:150) CompletePlayerController.Start () (at Assets/_Completed-Assets/Scripts/CompletePlayerController.cs:43)
NullReferenceException: Object reference not set to an instance of an object CompletePlayerController.SetTimerText () (at Assets/_Completed-Assets/Scripts/CompletePlayerController.cs:175) CompletePlayerController.Update () (at Assets/_Completed-Assets/Scripts/CompletePlayerController.cs:56)
Here is my CompletePlayerController code:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.SceneManagement;
//Adding this allows us to access members of the UI namespace including Text.
using UnityEngine.UI;
public class CompletePlayerController : MonoBehaviour
{
public float speed; //Floating point variable to store the player's movement speed.
public Text winText; //Store a reference to the UI Text component which will display the 'You win' message.
public Text thirstText;
public Text hungerText;
public Text timerText;
private Rigidbody2D rb2d; //Store a reference to the Rigidbody2D component required to use 2D Physics.
private int thirstCount;
private int hungerCount;
Rigidbody2D bullet;
float speed2 = 30f;
float timeLeft;
// Use this for initialization
void Start()
{
//Get and store a reference to the Rigidbody2D component so that we can access it.
rb2d = GetComponent<Rigidbody2D> ();
//Initialize counts to zero and starts timer from 30 seconds.
thirstCount = 0;
hungerCount = 0;
timeLeft = 30.0f;
SetThirstText();
SetHungerText();
SetTimerText();
}
void Update()
{
timeLeft -= Time.deltaTime;
SetTimerText();
if(timeLeft < 0)
{
RestartScene();
}
}
//FixedUpdate is called at a fixed interval and is independent of frame rate. Put physics code here.
void FixedUpdate()
{
//Store the current horizontal input in the float moveHorizontal.
float moveHorizontal = Input.GetAxis ("Horizontal");
//Store the current vertical input in the float moveVertical.
float moveVertical = Input.GetAxis ("Vertical");
//Use the two store floats to create a new Vector2 variable movement.
Vector2 movement = new Vector2 (moveHorizontal, moveVertical);
//Call the AddForce function of our Rigidbody2D rb2d supplying movement multiplied by speed to move our player.
rb2d.AddForce (movement * speed);
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.CompareTag ("PickUp"))
{
other.gameObject.SetActive(false);
hungerCount = hungerCount + 20;
SetHungerText();
}
if (other.gameObject.CompareTag("Anti-jaguar"))
{
RestartScene();
}
if (other.gameObject.CompareTag ("Water"))
{
SetThirstText ();
other.gameObject.SetActive(true);
thirstCount = thirstCount + 20;
}
if (other.gameObject.CompareTag ("Plant"))
{
other.gameObject.SetActive(false);
hungerCount = hungerCount + 10;
SetHungerText ();
}
}
void SetThirstText()
{
thirstText.text = "Thirst: " + thirstCount.ToString () + "%";
if (thirstCount >= 100 && hungerCount >= 100)
{
winText.text = "You win!";
}
}
void SetHungerText()
{
hungerText.text = "Hunger: " + hungerCount.ToString () + "%";
if (thirstCount >= 100 && hungerCount >= 100)
{
winText.text = "You win!";
}
}
void SetTimerText()
{
timerText.text = "Time left: " + timeLeft.ToString() + " seconds";
}
void RestartScene()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
}
Your answer
Follow this Question
Related Questions
Unity {[(2D)]} RotateAround while jumping 0 Answers
How do i make my enemies face the player? 2D 0 Answers
Need help for bullet script,Script for bullet 0 Answers
1st Person shooter, move player forward where cam is facing 1 Answer
Error CS1519 1 Answer