Как я могу управлять различным оружием в скрипте менеджера? - PullRequest
0 голосов
/ 24 апреля 2020

Я делаю свою RPG игру в единстве. Поскольку мне нужно много разного оружия, я попытался сделать сценарий для каждого оружия. Затем вместо того, чтобы задействовать функцию Атака в объекте каждого оружия, я по какой-то причине захотел управлять ими в другом классе, таком как WeaponManager. Тем не менее, я понятия не имел, как управлять различными классами. Кажется неэффективным писать все коды для каждого класса, такие как

if((gameObject).name=="Wand")
    gameObject.Getcomponent<Wand>().Attack();
else if((gameObject).name=="Sword")
    gameObject.Getcomponent<Sword>().Attack();

... и т. Д.

Другими словами, я также подумал о функции SendMessage, но это также не кажется эффективным.

Я размышляю, как мне решить эту проблему. Какой метод я могу использовать?

1 Ответ

1 голос
/ 24 апреля 2020

Классический пример использования для объектно-ориентированного программирования :

Наследование!

Использование общего родительского класса оба наследовать и либо реализовать метод virtual с общим стандартным поведением, которое наследующие классы могут перезаписать / расширить или сделать его abstract поэтому наследующие классы должны реализовать это.

public abstract class Weapon : MonoBehaviour 
{ 
    public abstract void Attack(); 

    // alternatively implement some default behavior
    // in this case the child classes can but don't have to override this
    //public virtual void Attack()
    //{
    //    Debug.Log("Harr Harr .. but I'll do nothing else!", this);
    //}
}

, а затем

public class Wand : Weapon 
{ 
    public override void Attack()
    { 
        ... 
    } 
} 

и

public class Sword : Weapon 
{ 
    public override void Attack()
    { 
        ... 
    } 
}

, затем просто go

gameObject.GetComponent<Weapon>().Attack();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...