Ints передаются по значению, поэтому параметр врага является временной копией. Измените все, что вы хотите, но как только вы не измените объект врага жизни, вы измените копию.
Исправлено: передача вражеского объекта. То есть, если вы манипулируете объектом, изменения будут постоянными.
Итак, enemy.life -= player.damage
должен сделать свое дело.
РЕДАКТИРОВАТЬ:
Изменить вызов с:
private void OnTriggerEnter(Collider other)
{
Hit(other, gameObject.CompareTag("ERunner"), enemyRunner.life, enemyRunner.killPoint);
}
на
private void OnTriggerEnter(Collider other)
{
Hit(other, gameObject.CompareTag("ERunner"), enemyRunner );
}
Затем измените метод HIT на
public void Hit(Collider other, bool enemyInstanceTag, [Enemy Type or Interface] enemy)
{
if (other.gameObject.CompareTag("PistolBullet") && enemyInstanceTag)
{
enemy.life -= player.damage;
player.score += enemy.KillPoint;
Destroy(other.gameObject);
}
}
Я не могу определить тип врага по опубликованному коду, поэтому Я поместил там [Тип врага или Интерфейс]
Дальнейшее редактирование - Как заставить это работать для всех типов врагов:
Создать интерфейс
public interface iHittable{
public int DoDamage(int damage)
}
Сейчас у всех ваших врагов будет
public Class TieFighter : iHittable{
// lots of code
// important bit
public int DoDamage(int damage) // from iHittable
{
this.life -= damage;
return this.PointsForDamage; // could be another method that calculates points, or a field if points are constant.
}
}
Теперь мы также можем сделать:
public Class UssEnterprise : iHittable{
{
public int DoDamage(int damage) // from iHittable
{
if (sheildLevel > 0)
{
sheildLevel -= damage;
return 0;
}
else
{
life -= damage;
return PointsForDamage;
}
}
}
Итак, предположим, что наш враг-Раннер - TieFighter. Вызов по-прежнему будет:
Hit(other, gameObject.CompareTag("ERunner"), enemyRunner );
И наш метод будет:
public void Hit(Collider other, bool enemyInstanceTag, iHittable enemy)
{
if (other.gameObject.CompareTag("PistolBullet") && enemyInstanceTag)
{
player.score += enemy.DoDamage(player.damage);
Destroy(other.gameObject);
}
}
Хитрость в том, что объекты могут быть разных типов и в зависимости от того, какой тип мы называем их, мы можем зависеть от них, чтобы обеспечить различные методы.