How to assign Image gameobject to a variable via script? C#

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


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();