Trying to reference a float, but it wont work?
I have an object, called 'Point', that is set to 'is trigger', and has a script called 'GetPoint' that will cause it to destroy itself and change a float, 'points', by +1 when the player comes in contact with it. I am trying to display the points in a ui - text script called 'Score'. It seems to work, but after the player touches the object and the score is displayed in the console (which is how I set it while trying to get it to work) the following error message appears.
NullReferenceException: Object reference not set to an instance of an object Score.Update () (at Assets/Score.cs:18)
GetPoint script: using System.Collections; using System.Collections.Generic; using UnityEngine;
public class GetPoint : MonoBehaviour {
public GameObject pickupEffect;
public float points = 0f;
void OnTriggerEnter (Collider other)
{
if (other.CompareTag("Player"))
{
Pickup();
}
}
void Pickup()
{
//Instantiate(pickupEffect, transform.position, transform.rotation); ignore this
points += 1f;
Debug.Log(points);
Destroy(gameObject);
}
}
Score script:
using UnityEngine;
public class Score : MonoBehaviour {
GameObject Point;
// Update is called once per frame
void Update()
{
GameObject Point = GameObject.Find("Point");
GetPoint GetPoint = Point.GetComponent<GetPoint>();
Debug.Log(GetPoint.points);
}
}
Please help!
Answer by PersianKiller · Feb 19, 2018 at 05:20 AM
it adds score,. and then in this line it destroys the point object
Destroy(gameObject);
I think you better to change your script to something like this.
public class Score : MonoBehaviour {
public int score;
public Text scoreText;
public void AddScore(int a)
{
score+=a;
scoreText.text=score.tToString ();
}
you should not check this stuff in update function.so in this case only if you pick points,they will add score ,not 50 times per frame (if you use update)
and Points Script
public GameObject pickupEffect;
public int points = 0f;
void OnTriggerEnter (Collider other)
{
if (other.CompareTag("Player"))
{
Pickup();
}
}
void Pickup()
{
//Instantiate(pickupEffect, transform.position, transform.rotation); ignore this
points = 1;
Debug.Log(points);
FindObjectOfType<Score> ().AddScore(points);
Destroy(gameObject);
}
Thank you sooooo much! I just couldn't get it to work, and nothing I found online explained or helped! It's all working great now, thank you!
Your answer
Follow this Question
Related Questions
Access variables or methods from another class (or gameObject) [C#] 1 Answer
Having referencing Problems while creating a tile brush for an editor in unity 0 Answers
How do I reference an Instantiate object? 1 Answer
Reference to components of UI widget 0 Answers
How do I change a Shader Graph's property (float) over time? 0 Answers