- Home /
This post has been wikified, any user with enough reputation can edit it.
If Enemy Health (< 10) then Exp (+10)?
Hey I'm working with a Experience script and basically I want the player to gain 10xp when the enemy's HP drops below 10. I have Enemy Health attached to the Enemy and Experience attached to the Player. I've tried using Get.Component commands but I've just confused myself xP
Here is the Experience script in C#
using UnityEngine;
using System.Collections;
using System;
public class Experience : MonoBehaviour {
public Transform myTransform;
public int maxExp;
public int expToLevel = 0;
public int curExp;
public int realExp;
public int maxLevel = 99;
public int curLevel = 1;
private string displayLevel;
public bool changeLevel = true;
private Rect windowRect = new Rect (20, Screen.height / 2, 210, 125);
public bool experienceBarEnabled = true;
public float experienceBarLenght;
void Start () {
GameObject go = GameObject.FindGameObjectWithTag("Player");
myTransform = go.transform;
}
void OnGUI() {
windowRect = GUI.Window (2, windowRect, LevelWdw2Function, "Character Level");
if (experienceBarEnabled == true) {
GUI.Box(new Rect(20, Screen.height - 40, experienceBarLenght , 20), curExp + "/" + maxExp);
}
}
void LevelWdw2Function (int windowID) {
GUI.Box(new Rect(5, 20, 200, 100), displayLevel);
GUI.DragWindow();}
void Update () {
displayLevel = "Level: " + curLevel +
"\n Exp To Level: " + expToLevel +
"\n Current Exp: " + curExp +
"\n Exp Needed: " + realExp;
levelModifier();
experienceBarLenght = (Screen.width - 40) * (curExp / (float)expToLevel);
}
public void levelModifier() {
if(changeLevel){
for(int i=0; i < curLevel; i++) {
expToLevel = expToLevel + ((curLevel + 1) * 10) - (curLevel -1) * 10;
changeLevel= false;
}
}
realExp = expToLevel - curExp;
maxExp = expToLevel;
.
if(curExp >= expToLevel && curLevel< maxLevel ) {
curLevel++;
changeLevel = true;
}
if(curExp > maxExp){
curExp = maxExp;
}
if(curLevel > maxLevel){
curLevel = maxLevel;
}
if(curLevel < 1) {
curLevel = 1;
}
}
}
And this is the Enemy Health script in C#
using UnityEngine;
using System.Collections;
public class EnemyHealth : MonoBehaviour {
public int maxHealth = 100;
public int curHealth = 100;
public bool ShowHits = false;
public float healthBarLength;
// Use this for initialization
void Start () {
healthBarLength = Screen.width / 2;
}
// Update is called once per frame
void Update () {
AdjustCurrentHealth(0);
}
void OnGUI() {
GUI.Box(new Rect(10, 40, healthBarLength, 20), curHealth + "/" + maxHealth);
GUI.Label(new Rect((Screen.width / 2) + 10, 40, healthBarLength, 20), "Enemy");
}
public void AdjustCurrentHealth(int adj) {
curHealth += adj;
if(curHealth < 0)
curHealth = 0;
if(curHealth > maxHealth)
curHealth = maxHealth;
if (maxHealth < 1)
maxHealth = 1;
if (curHealth < 10)
{
Destroy (gameObject);
}
healthBarLength = (Screen.width / 2) * (curHealth / (float)maxHealth);
}
}
Thanks in advance for any help and or tips :)
Comment
Best Answer
Answer by laradov · Nov 26, 2012 at 11:32 AM
First, make curExp static:
public static int curExp;
Then in Enemy Script:
if (curHealth < 10)
{
Destroy (gameObject);
Experience.curExp += 10;
}
Such a simple remedy to such a headache xD. Thanks a ton, you have been a great help and my understanding of C# has vastly improved! Thanks again :)