У меня проблемы с вызовом метода из одного класса в другой - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь вызвать этот метод от моего врага сценария к моему проигрывателю сценария, может ли кто-нибудь мне помочь?

Первое пространство имен кода - враг, второе - игрок

private void OnTriggerEnter2D(Collider2D other)
{
   DamageDealer damageDealer = other.gameObject.GetComponent<DamageDealer>();
   ProcessHit(damageDealer);
}

public void ProcessHit(DamageDealer damageDealer)
{
   health -= damageDealer.GetDamage();
   if (health <= 0)
   {
       Destroy(gameObject);
   }
}

private void OnTriggerEnter2D(Collider2D other) 
{
}

1 Ответ

1 голос
/ 30 сентября 2019

Попробуйте использовать абстрактный базовый класс, общий для Enemy и Player - например, Character или для всего, что имеет смысл для вашей программы.

  public abstract class Character
    {

    public virtual void OnTriggerEnter2D(Collider2D other)
    {
        DamageDealer damageDealer = other.gameObject.GetComponent<DamageDealer>();
        ProcessHit(damageDealer);
    };

    public void ProcessHit(DamageDealer damageDealer)
    {
        //ProcessHit accessible for all classes that inherit Character
        health -= damageDealer.GetDamage();
        if (health <= 0)
        {
            Destroy(gameObject);
        }
    }
}
public class Enemy : Character
{
    //this has both methods as declared in Character
}
public class Player : Character
{
    // this needs to be overriden for Player
    public override void OnTriggerEnter2D(Collider2D other)
    {
        //Enter OnTriggerEnter2D logic for Player
    }
}

Так что если вам нужен любой класс, которыйимеет OnTriggerEnter2D, чтобы действовать по-другому, просто переопределить его и изменить логику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...