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);
}
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;
}