Суть в том, чтобы по экрану проплыло сообщение "основное задание обновлено". Пока что оно отскакивает от главного героя, но это крайне невыгодно. Ведь взять гарнизон может и не Маркел.
Я думаю в этом и суть отплывающего сообщения, что оно привязано к объекту. В большинстве случаев можно отследить какой герой выполнил событие, оно передается и по триггерам касания, и по завершению боев и много где ещё.
Как заставить его в начале боя идти сначала, а не с того места, где остановился в прошлом бою?
Так он же в начале каждого боя вызывает функцию Start() и дальше по разным событиям другие функции. Переопределив свою функцию Start() можно в ней всё что угодно сбросить. Если вы скрипт оборачиваете в отдельный поток, наверное надо отследить событие конца боя и выйти из него.