Потому что монобехи не предусмотрены для работы с асинками, у них нет стокового awaiter-а, а юнитаска не принесла свою реализацию. Сделай нормальный синхронный метод, а внутри вызови асинхронный через UniTask.Run.
Всю эту логику вынести в метод который возращает таску и вызвать её через Run?
Да, или можно прям лямбдой
Как выглядит OnHit?
Ммм, значит ты действительно где-то ранее контекст переключаешь
Извиняюсь, а можно простым языком?)
это типо корутина?
UniTask.SwitchToThreadPool где-нибудь вызывается?
А, подожди, я не туда воюю. UniTask.Create, а не Run
Потому что там Func без аргументов
Что тогда делать?
() => OnHit(...)
Уже пробовал, когда нужна смена позиции - ничего не происходит, ошибок нет
Отладчиком пройди шаг смены позиции. Он покажет исключение, если что-то не так.
Куда именно смотреть? Конкретно мне ничего не пишет
Это после назначения позиции? Выглядит норм. В transform.position значение поменялось?
Дебаг пишет, что transform.position такой же, как у startPos, в юнити же всё совсем по другому
В инспекторе показываются локальные координаты. У объекта есть родитель?
Это и есть родительский
Ммм, тогда могу только предложить копать глубже. Из этого кода я не вижу больше причин, почему это не работает. Возможно есть ещё что-то, что меняет позицию. Можно поставить watch в отладчике на transform.position, тогда он остановит поток в случае изменения значения. Либо же задержать выполнение через Delay и сравнить позицию ещё раз. Если теория подтвердится, значит точно есть сторонние изменения.
А как watch поставить?
В проекте 2 скрипта, только конкретно в этом я меняю позицию игрока именно через transform.position, двигается он через CharacterController.Move (кстати, может в нём дело?)
Действительно)) Проблема была в CharacterController'е) При смерти выключаю, при возрождении - включаю и всё отлично работает...
Обсуждают сегодня