- Home /
Is there a better way to do this? (finding scripts of different names but running function with same name regardless)
Trying to get whatever I shoot to run its TakeDamage function. So far this is just two things but it might be more. Is this the best way to do it or should I make each thing a take damage script and use that for anything that gets shot? I hope there is a way to just call the function from a script found on the shot game object. Thanks for any help!
EnemyManager enemyManager = shootHit.collider.GetComponent<EnemyManager>();
SpawnerManager spawnerManager = shootHit.collider.GetComponent<SpawnerManager>();
// If there is an enemy manager script...
if (enemyManager != null)
{
//... and if the enemy or spawner is not dead
if (!enemyManager.isDead)
{
// ... the enemy should take damage.
enemyManager.TakeDamage(damage);
}
}
//same thing with spawner manager
// probably a better way to organize these two things, especially if it comes out to be more than 2 things
if (spawnerManager != null)
{
if (!spawnerManager.isDead)
{
spawnerManager.TakeDamage(damage);
}
}
Answer by Reynarz · Aug 15, 2017 at 03:42 PM
Of course is not the best way. What you can do is make an interface like this:
public interface IObjectThatCanGetDamage
{
void TakeDamage(float damage);
bool IsDead { get;set; }
}
And implement that interface in all your objects that can get damage.
Then in your collision detection:
private void OnCollisionEnter2D(Collision2D collision)
{
var collisionObtained = collision.transform.GetComponent<IObjectThatCanGetDamage>();
if(collisionObtained is IObjectThatCanGetDamage)
{
if(!collisionObtained.IsDead)
collisionObtained.TakeDamage(10f);//Set a random damage...
}
}
But in your code i can see that you are using RaycastHit, is almost the same
private void SetDamage()
{
var collisionObtained = shootHit.collider.GetComponent<IObjectThatCanGetDamage>();
if(collisionObtained is IObjectThatCanGetDamage)
{
if(!collisionObtained.IsDead)
collisionObtained.TakeDamage(10f);//Set a random damage...
}
}
Your answer
Follow this Question
Related Questions
How can I shoot bullets that you can aim with the crosshair? 1 Answer
Problem with gun/shooting scripting 0 Answers
Rapid fire does damage every frame 0 Answers
Inverse Kinematic is not on position 0 Answers
Prefab shooting damage/health? 1 Answer