Вопрос:

Вызов переменной Unity C # Base / Child

c# unity3d

63 просмотра

2 ответа

24 Репутация автора

В приведенном ниже коде игрок нажимает на элемент в инвентаре, и целью кода является ЕСЛИ элемент является типом (базовым) типом пищи (типом предмета), тогда я хочу вызвать метод в скрипте Food , Я хочу иметь возможность вызывать функцию из другого класса, передавая с плавающей точкой из (food).

public void UseItem(){
    if (item != null) {
        if (item is Food) {//checking when i click to see if item is of type food
            PHH.Heal(hpToHealWhenAte);//here is where the problem is
        } else {
            item.Use ();
        }
    }
}

питание

public class Food : Item {
    public float healthHealedOnUse;
}
Автор: Brandon G Источник Размещён: 08.01.2018 01:16

Ответы (2)


1 плюс

14091 Репутация автора

Приведите itemк Foodтипу, затем вызовите функцию с healthHealedOnUseпеременной:PPH.Heal(((Food)item).healthHealedOnUse)

Это называется Down-Casting (приведение из базового класса в дочерний класс)

public void UseItem(){
        if (item != null) {
            if (item is Food) { //checking if item is Food type..
                PHH.Heal(((Food)item).healthHealedOnUse); //Cast item to Food..
            } else {
                item.Use ();
            }
        }
    }

Другой способ литья также выглядеть так: (item as Food).healthHealedOnUse..

((Food)item)( Приведение в стиле C) вызовет исключение, если предмет не может быть наложен на еду ... так (item as Food)как наложение стиля известно как безопасное наложение и вернет ноль, если предмет не может быть наложен на еду.

Автор: Brandon Размещён: 08.01.2018 01:23

0 плюса

11979 Репутация автора

Переопределения метода

Ваш базовый класс предметов:

public class Item {
    public virtual void Use(Player PHH) {
    }
}

И ваш класс еды:

public class Food : Item {
    public float healthHealedOnUse;

    public override void Use(Player PHH) {
        PHH.Heal(healthHealedOnUse); 
    }
}

Ваш метод UseItem:

public void UseItem(){
    if (item != null) {
        item.Use(PHH);
    }
}
Автор: Draco18s Размещён: 08.01.2018 03:15
Вопросы из категории :
32x32