x


Creating a Lifebar with simple GUI in C#

Hi there, I'm pretty new to Unity. I was trying to make a lifebar for my player with Unity's GUI through code in C#.

The maximun life is 200 and the minimum 0. I've already got the damage sorted out practically, but I wanted to display it in a simple lifebar.

I want to find a way to make a GUI bar in the top-left side of the screen that is represented as CurrentLife/TotalLife (TotalLife should be the max size, and should have to be another GUI as a background texture).

There should be a string "LIFE" in the middle of the bar. Also, I want to make the bar and the string to shake when a bullet hits the player.

If you could help me, I'd also like to make a label that shows how many enemies I have killed (I use the Destroy.GameObject thing) in the top right corner of the screen. And, as a player is killed, there should be a Points Label that increases by 20 everytime I kill an enemy (as in "SCORE: 0", I kill an enemy "SCORE: 20", another, "SCORE: 40").

And, to end this, I wanted to add an "ACCURACY" label under the above (as in ShotsThatHitAnEnemy/ShotsMade).

If anyone could help me in any of this, It'd be much appreciated.

Thanks in advance! :)

more ▼

asked Nov 09 '10 at 05:34 PM

SantiN90 gravatar image

SantiN90
20 4 5 11

  1. You're asking for a lot in one question, much of which is covered in tutorials and other questions that you would have found if you'd have looked. 2. You haven't included any example of what you've tried already. Essentially you are asking someone to write your code for you. If you don't want to give this impression, try to get it working and then ask about the parts that aren't working for you, including what you've already tried.
Nov 09 '10 at 06:06 PM skovacs1

For example, search 'health bar' (http://answers.unity3d.com/search?q=health+bar) and there are plenty of answers. For the rest of the gui elements, you simply need to store some variables in your gui script and update them as things change. Shaking the GUI is a little more complex and if you asked about that specifically in it's own question, I'd be glad to answer, but simply put, you'd change the positions of your GUI objects over a period of time.

Nov 09 '10 at 06:10 PM skovacs1

Yeap, you are right. Thanks anyways.

Nov 09 '10 at 06:18 PM SantiN90

The thing is, there is no much help in C#. And UnityAnswers search engine is not much of a friend for that matter.

Nov 09 '10 at 06:21 PM SantiN90

Honestly, converting the js to C# is super easy. Mostly, you just have to move some keywords around. Check out this link if you're having difficulties bridging the gap (http://answers.unity3d.com/questions/5507/what-are-the-syntax-differences-in-c-and-javascript)

Nov 09 '10 at 06:32 PM skovacs1
(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first

Okay, I've been coding a little bit and this is what I got

using UnityEngine;
using System.Collections;

public class UserInterfaceGraphics : MonoBehaviour {


public Rect lifeBarRect;
public Rect lifeBarLabelRect;
public Rect lifeBarBackgroundRect;
public Texture2D lifeBarBackground;
public Texture2D lifeBar;




//private float damage = 10;

private PlayerVitalData PVDScript;
public GameObject PlayerData;


private float LifeBarWidth = 300f;

// Use this for initialization
void Start(){
    instance = this;
    PVDScript = PlayerData.GetComponent("PlayerVitalData") as PlayerVitalData;

}
// Update is called once per frame

public static UserInterfaceGraphics instance;


void OnGUI()
{

    instance.lifeBarRect.width = LifeBarWidth * (PVDScript.life/200);
    instance.lifeBarRect.height = 20;

    instance.lifeBarBackgroundRect.width = LifeBarWidth;
    instance.lifeBarBackgroundRect.height= 20;

    GUI.DrawTexture(lifeBarRect, lifeBar);
    GUI.DrawTexture(lifeBarBackgroundRect, lifeBarBackground);

    GUI.Label(lifeBarLabelRect, "LIFE");



}

}

The Life Bar or Health Bar or whatever now works like wonders. I just got hurried up and made questions too soon, instead of searching before.

I hope it helps anyone down the road.

more ▼

answered Nov 09 '10 at 08:30 PM

SantiN90 gravatar image

SantiN90
20 4 5 11

(comments are locked)
10|3000 characters needed characters left

Use GUI.Box instead. Define the lenght of the box using the amount of life left. You have to call the variables from your health script. You have to make assign your texture in the new style.

For example:

using UnityEngine;
using System.Collections;

public class UserInterfaceGraphics : MonoBehaviour {

public float currentLife;

public GUIStyle : myGUIStyle;

Void OnGUI () {

//For example you have 100 life’s maximum.

GUI.Box(new Rec(10, 10, 0.001 * Screen.width * currentlife,  0.1 * Screen.heigth), “LIFE”, myGUIStyle);

}

}

I hope this is helpfull.

more ▼

answered Nov 14 '12 at 02:56 PM

Cas Unity3D gravatar image

Cas Unity3D
1 1

(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x3815
x394
x280
x70
x28

asked: Nov 09 '10 at 05:34 PM

Seen: 7575 times

Last Updated: Nov 14 '12 at 02:56 PM