- Home /
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.
Answer by smallbit · May 12, 2015 at 10:46 AM
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)
Sorry I should've clarified, I'm using Canvas type for _canvas and Image type for _visualHealth, But I used your advice for referencing and found the solution! I'm a beginner so even though I did check the documentation quite a bit, it doesn't matter if you don't understand it lol.
Answer by TenmaMetsuki · May 13, 2015 at 04:40 AM
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();
Your answer

Follow this Question
Related Questions
C# setting instantiated prefab variables from another script. 1 Answer
The associated script cannot be loaded using UI prefab 0 Answers
How can I display Asset Prefab preview image on an UI image in my game? 0 Answers
Apply texture on prefab 1 Answer
Instantiate Prefab (Image) and show it on the screen? 1 Answer