I have a prefab for my player character which gets instantiated in the scene through a script rather than hierarchy. When it gets instantiated in this way, the public variables that I need scene gameobjects assigned to are empty.
What I’m trying to do is attaching a healthbar. I have a canvas with images for it, and one of them called VisualHealth is meant to demonstrate the player losing/gaining health by moving. I assigned the canvas just fine through
_canvas = Canvas.FindObjectOfType();
- the problem is with the image, I tried
_visualHealth = Image.FindGameObjectOfType(“VisualHealth”);
but obviously that doesn’t work because I can’t put anything in the brackets.
Is there some other way to get it assigned? I tried
_visualHealth = GameObject.FindGameObjectWithTag(“VisualHealth”) as Image;
as well but it gives a can’t convert GameObject to Image error. I’d really appreciate any help I can get, thank you.
You probably didn’t look too much into documentation. As command says “FindGameObject” finds GameObject. Than having it you need to get component of type you want and assign it to the reference.
For example
//assuming your health bar (_canvas) is SpriteRenderer type
//Find GameObject first
GameObject go = GameObject.Find("VisualHealth");
//check if we have a match
if(go!= null)
{
//assign sprite reference to your variable
_canvas = go.GetComponent<SpriteRenderer>().sprite;
}
Alternatively create your hp bar as singleton, and than from anywhere in the code just call
hpBar.instance.gameObject.GetComponent<SpriteRenderer>().sprite;
or even better keep the reference to the image inside the script as variable and write the method that updates it (i.e. updateHp)
In case anyone else ever gets stuck with this kinda stuff:
// Variable
GameObject _go;
// In Start() method
_go = GameObject.Find("VisualHealth");
if(_go != null)
{
_visualHealth = _go.GetComponent();
}
_canvas = Canvas.FindObjectOfType();