x


Raycast shooting problems

We have been working on a script that shoots a raycast from the main camera, and in theory, if it hits an object tagged "enemy", the enemy will die. The problem is, that once one "enemy" is killed, all objects tagged "enemy" are also destroyed. Here are the two scripts we use:

var bulletDamage = 50;
var range = 10000;
var hit :  RaycastHit;

function shoot()
{
    if(Input.GetButtonDown("Fire1"))
    {
        if(Physics.Raycast(transform.position, transform.forward, hit, range))
        {           
            if(hit.collider.gameObject.tag == "enemy")
            {
                return true;
            }
            else
            {
                return false;
            }

        }
    }
}

function Update()
{
    if(shoot() == true)
    {
        print("HIT");
        AIhealth.AIHEALTH = AIhealth.AIHEALTH - bulletDamage;
    }
}

Then, our AIhealth script:

static var AIHEALTH = 100;

function Update () 
{
        if(AIHEALTH <= 0)
        Destroy(gameObject);
}
more ▼

asked Oct 23 '10 at 09:08 PM

Jordan 7 gravatar image

Jordan 7
12 2 2 4

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

1 answer: sort voted first

As I see the problem you have attached the script AIhealth to all enemies in the scene. Thus by accessing a static variable all the enemies are damaged. Alternatively you could send a message to the enemy that was hit. This is c# code for the first script

using UnityEngine;

using System.Collections;

public class raycastshot : MonoBehaviour { public float bulletDamage = 50; public float range = 10000; public RaycastHit hit;

void shoot()
    {
        if(Input.GetButtonDown("Fire1"))
        {
               if(Physics.Raycast(transform.position, transform.forward,out hit, range))
               {           
                if(hit.collider.gameObject.tag == "enemy")
                {
                    GameObject enemy=hit.collider.gameObject;
                    enemy.BroadcastMessage("applyDamage",bulletDamage);
                }
            }
         }
      }

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
    shoot();
}

}

Then for the AIhealth script

using UnityEngine;

using System.Collections;

public class AIhealth : MonoBehaviour { public float AIHEALTH = 100;

// Use this for initialization
void Start () {

}

// Update is called once per frame
void Update () {
    if(AIHEALTH <= 0)
    {
        Destroy(gameObject);
    }
}

public void applyDamage(float damage)
{
    AIHEALTH=AIHEALTH-damage;
}

}

Now every enemy should have its own health.

more ▼

answered Oct 24 '10 at 01:05 PM

lhk gravatar image

lhk
520 14 15 24

(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:

x1693
x1529
x329
x308
x137

asked: Oct 23 '10 at 09:08 PM

Seen: 1663 times

Last Updated: Oct 23 '10 at 09:08 PM