Но я решил пойти дальше. Зачем мне привязываться к управлению, подумал я, когда я могу привязаться к состоянию игрока. Говоря проще - следить за игроком и в зависимости от его состояния выполнять действия в коде. Игрок пошел влево? Ок - флип спрайт. Направо? - флип. Прыгает? Меняем спрайт на спрайт прыжка. Идею вы поняли. Текущий x=предыдущему x, а текущий y > предыдущего y? Значит игрок сейчас прыгает вверх. И я написал такой код Смысл - исходя из текущей координаты игрока transform и предыдущей по оси х и у делать вывод о состоянии игрока.
// Фиксированный вызов кода - по умолчанию 0.02 (50 раз в секунду). void FixedUpdate() { // Получаем информацию о текущем состоянии игрока. GetPlayerCurrentState(); // Движение. // Поворачиваем спрайт. if (playerCurrentState == PlayerCurrentState.MoveRight) {sr.flipX = false;} else if (playerCurrentState == PlayerCurrentState.MoveLeft) {sr.flipX = true;} } }
В результате: поворот игрока при обычном движении работает, но с небольшой задержкой. поворот игрока после прыжка работает с задержкой 1.5 сек (идет спиной 1.5 сек, после прыжка)
В чем моя ошибка или это вообще плохая идея и так не делается?
Не понял, а потому MoveRight должен быть привязан к Y? Если игрок побежит в горку или с нее, то условие не сработает, тоже самое и про джамп, у тебя игрок прыгает тупо на одном месте? Если уж так делать, то должно быть еще MoveRightYStill, MoveRightYDown, MoveRightYUp, JumpUpXStill, JumpUpLeft, JumpUpRight и тд.
Saltant, 1max1 Вот такой код. Это идея, так что тут не про рефракторинг, а на будущее - ведь потом понадобится отслеживать состояние игрока и что то делать, исходя из его состояния. Прыгает? Меняем спрайт, например.
Не понял, а потому MoveRight
Хорошее замечание. По идее, в игре у меня нет горок - только плоскость, но если завтра я решу сделать горку... Есть над чем подумать. Пока отказался от своей идеи сделать определение состояния героя - т.к. код глючит.
Saltant
тут ваще по идеи можно было 1 строчку сделать
sr.flipX = Input.GetAxis("Horizontal") < 0; Нее. Налево пойдешь - ось повернешь, направо пойдешь...а назад не повернешься.