- Home /
health not subtracting
i made a script for a ship because i wanted to be able to destroy certain parts of it when they take enough damage, except the health variable doesn't go down.
i can see the sparks from the bullets and they are hitting the ship and if i shoot a missile it will explode on the ship but it takes no damage.
here's my script:
var health = 1000;
function OnCollisionEnter () {
health -= 50; //asteroids, missiles and fighters
}
function ApplyDamage () {
health -= 1; //bullets
}
function Update () {
if(health <= 0){
Destroy(gameObject); //Destroy the ship when it has no health (no explosion yet)
}
}
anyone know the problem?
Put some Debug.Log in that OnCollisionEnter function, make sure that it is definitely getting called.
well i put Debug.Log in and it got called for the missiles 3 times out of 5 but not for bullets
this is my gun script
var shotSound: AudioClip;
var bloodPrefab: GameObject;
var sparksPrefab: GameObject;
var loaded = 1;
var ammo = 0;
var startammo = 99999999;
var ableToFire = 1;
var muzzleflash : GameObject;
var dElay : float = 0;
function Start() {
ammo = startammo;
}
function Update () {
if (Input.GetButton("Fire1")){
if (loaded == 1){
if(ableToFire == 1){
if(ammo != -1){
Invoke("Shoot",dElay);
}
}
}
}
if (ammo == 0){
ammo = -1;
loaded = 0;
Invoke("reload", 3);
}
}
function Shoot(){
ammo -= 1;
ableToFire = 0;
Instantiate(muzzleflash, transform.position, transform.rotation);
Invoke("rechamber",0.12);
if (shotSound) audio.PlayOneShot(shotSound);
var hit: RaycastHit;
if (Physics.Raycast(transform.position, transform.forward, hit)){
var rot = Quaternion.FromToRotation(Vector3.up, hit.normal);
if (hit.transform.tag == "Enemy"){
if (bloodPrefab) Instantiate(bloodPrefab, hit.point, rot);
hit.transform.Send$$anonymous$$essage("ApplyDamage", Send$$anonymous$$essageOptions.DontRequireReceiver);
} else {
if (sparksPrefab) Instantiate(sparksPrefab, hit.point, rot);
}
}
}
function reload() {
loaded = 1;
ammo = startammo;
}
function rechamber() {
ableToFire = 1;
}
Answer by Eric5h5 · Jan 23, 2012 at 05:52 AM
That script would work as-is, so there must be some other factor involved. However it's not very efficient to constantly check the health in Update, given that it only changes occasionally. Instead just check when you need to:
var health = 1000;
function OnCollisionEnter () {
ChangeHealth (-50); //asteroids, missiles and fighters
}
function ApplyDamage () {
ChangeHealth (-1); //bullets
}
function ChangeHealth (amount : int) {
health += amount;
if (health <= 0) {
Destroy(gameObject); //Destroy the ship when it has no health (no explosion yet)
}
}
Your answer
Follow this Question
Related Questions
Trouble setting a parameter with a collision 1 Answer
Health and Damage [C#] 2 Answers
Possible Fall Damage OnCollisionEnter Won't Work! 0 Answers