Во первых, если юнит умер, то GetAttackerCreatures() его уже не выдаст. Насколько я помню, он выдаёт все текущие отряды на поле боя. Сам момент смерти любого существа сопровождается вызовом функции UnitDeath, в которую передается имя умершего существа, но что с этим именем можно делать, если существа уже нет, я не проверял.
Во вторых,
и в качестве имени юнита units?
units - массив имен, который вернула GetAttackerCreatures(). Если попытаться его скажем вывести:
print(units)
Будет что-то подобное:
{"creature_0", "creature_1", "creature_2", "creature_3"}
Когда мы перебираем эту таблицу циклом
for i, unit in units do
то переменная unit уже содержит имя одного существа, например "creature_0". Это внутреннее имя, которое игра присвоила отряду. В реальности оно немного другое. Лучше всего это увидеть, если просто в бою вызвать консоль и попробовать соответствующие команды.