Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Unity_в_действии_Джозеф_Хокинг_Рус.pdf
Скачиваний:
83
Добавлен:
21.06.2022
Размер:
26.33 Mб
Скачать

212      Глава 8. Добавление в игру интерактивных устройств и элементов

string equipped = Managers.Inventory.equippedItem;

if (equipped != null) { ¬ Отображение подготовленного элемента. posX = Screen.width - (width+buffer);

Texture2D image = Resources.Load("Icons/"+equipped) as Texture2D; GUI.Box(new Rect(posX, posY, width, height),

new GUIContent("Equipped", image));

}

posX = 10;

posY += height+buffer;

foreach (string item in itemList) { ¬ Просмотр всех элементов в цикле для создания кнопок. if (GUI.Button(new Rect(posX, posY, width, height),

"Equip "+item)) { ¬ Запуск вложенного кода при щелчке на кнопке.

Managers.Inventory.EquipItem(item);

}

posX += width+buffer;

}

}

}

Для отображения подготовленного элемента мы снова пользуемся методом GUI. Box(). Но так как он не является интерактивным, ряд кнопок Equip мы нарисуем с помощью метода GUI.Button(). Этот метод создает кнопку, которая при щелчке выполняет код внутри инструкции if.

Теперь, когда мы написали весь нужный код, выделите триггер в сцене и установите

всвитке Device Trigger флажок Require Key, после чего запустите игру. Попробуйте войти

взону триггера без ключа — ничего не произойдет. Теперь поднимите ключ и щелкните на кнопке, чтобы подготовить его к использованию; после этого вход в зону триггера откроет дверь.

Из спортивного интереса поместите ключ в точку с координатами –11, 5, –14 и попробуйте сообразить, как его можно достать. А пока мы рассмотрим процесс использования пакетов здоровья.

8.4.3. Восстановление здоровья персонажа

Восстановление здоровья персонажа является еще одним распространенным примером применения инвентаря. Нам потребуется внести в код два изменения: добавить новый метод в сценарий InventoryManager и новую кнопку в пользовательский интерфейс — для этого служат листинги 8.22 и 8.23 соответственно.

Листинг 8.22. Новый метод в сценарии InventoryManager

...

public bool ConsumeItem(string name) {

if (_items.ContainsKey(name)) { ¬ Проверка наличия элемента среди инвентаря.

_items[name]--;

if (_items[name] == 0) { ¬ Удаление записи, если количество становится равным нулю.

_items.Remove(name);

}

}else { ¬ Реакция в случае отсутствия в инвентаре нужного элемента.

Debug.Log("cannot consume " + name); return false;

}