Я сделал этот беспорядок, который отлично работает, но его трудно читать и изменять.
private void OnTriggerEnter(Collider other)
{
if (gunController.isGrabbed)
{
if (other.gameObject.CompareTag("PlayerBullet") && gameObject.CompareTag("Enemy1")) //Player to Enemy fire
{
enemy1.enemyHealth -= gunController.gunDamage;
Destroy(other.gameObject);
}
else if (other.gameObject.CompareTag("Enemy1Bullet") && gameObject.CompareTag("Player")) //Enemy to player fire
{
player.playerHealth -= gunController.gunDamage;
Destroy(other.gameObject);
}
}
else if(shotgunController.isGrabbed)
{
if (other.gameObject.CompareTag("PlayerBullet") && gameObject.CompareTag("Enemy1")) //Player to Enemy fire
{
enemy1.enemyHealth -= shotgunController.gunDamage;
Destroy(other.gameObject);
}
else if (other.gameObject.CompareTag("Enemy1Bullet") && gameObject.CompareTag("Player")) //Enemy to player fire
{
player.playerHealth -= shotgunController.gunDamage;
Destroy(other.gameObject);
}
} else if (uziController.isGrabbed)
{
if (other.gameObject.CompareTag("PlayerBullet") && gameObject.CompareTag("Enemy1")) //Player to Enemy fire
{
enemy1.enemyHealth -= uziController.gunDamage;
Destroy(other.gameObject);
}
else if (other.gameObject.CompareTag("Enemy1Bullet") && gameObject.CompareTag("Player")) //Enemy to player fire
{
player.playerHealth -= uziController.gunDamage;
Destroy(other.gameObject);
}
}
В основном, есть один контроллер для каждого оружия (пистолет, дробовик, узи) и код тот же для все они, единственное, что меняется, - это имя контроллера.
Поэтому моя идея состояла в том, чтобы создать метод и передать в качестве параметра список <> контроллеров и трижды повторить итерацию в одном и том же коде , Но я не могу передать список, поскольку типы контроллеров уникальны, я не могу хранить в списке различные типы контроллеров.
Я не знаю, есть ли более элегантный способ сделать это .