Разбег игрока на разных материалах

Программирование на Юнити.

Разбег игрока на разных материалах

Сообщение Denissimo 29 июл 2018, 13:52

Делаю контроллер от 3-го лица.
Если просто перемещать игрока, меняя его координаты (например, transform.Translate) то игрок не ведёт себя как физическое тело (разгоняется и тормозится мгновенно независимо от окружающей физики).
Хотелось бы, чтобы игрок, стоящий на льду, трогаясь с места, какое-то время буксовал, стоящий на резине - трогался мгновенно.
Попробовал AddForce.
Но тут есть нюанс. Получается, что игрока толкают в спину (или дают пинка, в зависимости от ForceMode), а не сам от ногами разгоняется.
То есть при старте на льду разгоняется быстро, а на резине - медленно.
А надо наоборот
.

Допустим, я получил параметры материала, на котором стоит игрок.
Как сделать так, чтобы он "отталкивался" от материала, на котором стоит, а не был пассивно толкаем "в спину"?
Denissimo
UNец
 
Сообщения: 17
Зарегистрирован: 21 ноя 2013, 18:49

Re: Разбег игрока на разных материалах

Сообщение Shekn 30 июл 2018, 09:11

Можно попробовать двигать игрока с использованием скорости. Когда игрок нажимает кнопку "вперёд", не двигать его вперёд, а начинать увеличивать его скорость, а на какое расстояние сдвигать вычислять уже в зависимости от неё. Так, например, на одной поверхности ты будешь сразу ставить скорость равной максимальной, и будет выглядеть, что игрок резко стартанул с места. На другой поверхности ты будешь скорость изменять постепенно от нулевой до максимальной (за 2 секунды, к примеру), и будет выглядеть, что игрок постепенно разгоняется и уже потом бежит как надо. То же самое и при отпускании кнопки "вперёд". Не сбрасывать скорость сразу в 0, а уменьшать её постепенно, тогда игрок будет как будто притормаживать, пока не остановится.
https://tugcga.github.io/
Аватара пользователя
Shekn
UNIт
 
Сообщения: 95
Зарегистрирован: 05 фев 2016, 14:20

Re: Разбег игрока на разных материалах

Сообщение Denissimo 30 июл 2018, 20:31

Shekn писал(а):Можно попробовать двигать игрока с использованием скорости. Когда игрок нажимает кнопку "вперёд", не двигать его вперёд, а начинать увеличивать его скорость, а на какое расстояние сдвигать вычислять уже в зависимости от неё. Так, например, на одной поверхности ты будешь сразу ставить скорость равной максимальной, и будет выглядеть, что игрок резко стартанул с места. На другой поверхности ты будешь скорость изменять постепенно от нулевой до максимальной (за 2 секунды, к примеру), и будет выглядеть, что игрок постепенно разгоняется и уже потом бежит как надо. То же самое и при отпускании кнопки "вперёд". Не сбрасывать скорость сразу в 0, а уменьшать её постепенно, тогда игрок будет как будто притормаживать, пока не остановится.


Спасибо,
Если не найду более "прямого" способа отталкиваться от поверхности, применю это.
При отпускании кнопки , кстати, скорость падает сама в зависимости от трения коллайдера о материал.

Я пробовал навесить коллайдеры на ступни, думал, при анимации, когда ноги будут молотить по полу, коллайдеры будут отталкиваться от пола вперёд.
Но, видимо, встроенная физика в Unity не настолько совершенна((
Модель молотит ногами с коллайдерами на срупнях по полу, но стоит на месте.
При анимации idle модель покачивается, так что коллайдеры взаимодействуют с полом.
Но при хотьбе вперед не движется.
Denissimo
UNец
 
Сообщения: 17
Зарегистрирован: 21 ноя 2013, 18:49


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11