ant0n
ну ок, я потестю на досуге. У меня есть годот, мне не сложно :)
Madware
> ну ок, я потестю на досуге. У меня есть годот, мне не сложно :)
давай, только отпишись обязательно ;)
ant0n
Все то у тебя парой строчек кода делается) И что за ненависть к ассетам?) То что ты на видио показал, не более чем просто одно действие))) import package -> fps controller))) вот и бомбит, да?)
ant0n
Я так понял, ты используешь rigid body, который реализует гравитацию, трение, скольжение, наверно даже сопротивление воздуха.
В CharacterController этого нет, ибо это просто коллайдер со специфической обработкой коллизии. В PhysX, кстати, можно сделать, чтобы персонаж скользил с крутой поверхности, но в Unity это не доступно.
Вообще я не уверен хорошо ли для этой цели подходит Rigidbody, ибо одно дело физика какой-то коробки, а другое дело - физика персонажа.
ant0n
Я вообще мимо проходил, просто увидел очередной велосипедист хвалит свой байк).
Смотрю OnControllerColliderHit из оригинального CharacterMotor. И видимо я не правильно понял как он работает.
function OnControllerColliderHit (hit : ControllerColliderHit) { if (hit.normal.y > 0 && hit.normal.y > groundNormal.y && hit.moveDirection.y < 0) { if ((hit.point - movement.lastHitPoint).sqrMagnitude > 0.001 || lastGroundNormal == Vector3.zero) groundNormal = hit.normal; else groundNormal = lastGroundNormal; movingPlatform.hitPlatform = hit.collider.transform; movement.hitPoint = hit.point; movement.frameVelocity = Vector3.zero; } }
Во первых, зачем lastGroundNormal не ясно. Но я это убрал и вроде все нормально.
Во вторых, я думал, что условие hit.moveDirection.y < 0 проверяет в состоянии прыжка персонаж или нет. Но сейчас заметил, что hit.moveDirection это абсолютно не вектор скорости.
При обычной ходьбе, hit.moveDirection == (0, -1, 0). При коллизии со стеной, получаем несколько hit'ов, первый вектор == (0, -1, 0), второй вектор == (x, 0, x), т.е. вектор горизонтальный. И только при коллизии с потолком, вектор == (0, 1, 0).
Видимо проверка защищает от потолка. Но т.к. у потолка не может быть hit.normal.y > 0, то проверки этой нормали достаточно.
В Unity документации https://docs.unity3d.com/ScriptReference/ControllerColliderHit-mo… irection.html написано:
CharacterController использует последовательность движений, чтобы выполнить движение в соответствие move direction и step Offset. moveDirection будет направлением движения, во время которого произошло движение.
В PhysX документации http://docs.nvidia.com/gameworks/content/gameworkslibrary/physx/a… ollerHit.html вообще два слова: Motion direction.
Хз что там за последовательность движений, но такое чувство, что горизонтальное и вертикальное движение происходит раздельно.
WISHMASTER35
> Вообще я не уверен хорошо ли для этой цели подходит Rigidbody, ибо одно дело
> физика какой-то коробки, а другое дело - физика персонажа.
Тут http://docs.nvidia.com/gameworks/content/gameworkslibrary/physx/g… er-controller описаны проблемы, связанные с использованием rigidbody.
The main advantage of kinematic controllers is that they do not suffer from the following issues, which are typical for dynamic controllers:
...
Из-за Auto-stepping персонаж очень сильно подпрыгивает, когда заходит на бордюры и тп. Кто-нибудь знает как лучше это исправить?
ant0n
>вот например, запилил на одном маленьком, но очень гордом движке
>умеет вроде все
Убогие прыжки в стиле супермена, на первую лестницу не зашел с первой попытки, со второй начинал катиться вниз как только персонаж останавливался...
Хотя отдам должное godot, при таком говнокоде юнити тоже примерно так же вела бы себя.
Dewa1s
> Убогие прыжки в стиле супермена
чем тебе прышки не угодили? или просто подгорает, но не к чему придраться? Хотя возможно ты просто не знаешь, что сила прыжка регулируется как угодно.
Dewa1s
> на первую лестницу не зашел
так и было задумано, не возможно зайти на слишком крутые подъемы. Со второй попытки я запрыгнул, если не дошло.
Dewa1s
> со второй начинал катиться вниз как только персонаж останавливался
тему не читай, сразу отвечай. Уже отвечал на этот вопрос.
Dewa1s
> при таком говнокоде юнити тоже примерно так же вела бы себя.
во-первых, где говнокод?
во-вторых, покажи как юнити при таком коде будет работать.
если не ответишь, то ты обычный подгоревший балабол. Я привел и пример и видео, как только меня попросили и получил взрывы пуканов, хотя чего еще можно было ожидать от юнитифилов?
Dewa1s
я так понимаю слилась школота
6-й пункт
"...Скорость может быть в от 0 до 1..."
Возможно стоит написать: "...Скорость может быть в промежутке от 0 до 1..."?
sawich
> в промежутке
в диапазоне, я бы сказал :)
sawich
поправил.
WISHMASTER35
> Из-за Auto-stepping персонаж очень сильно подпрыгивает, когда заходит на
> бордюры и тп. Кто-нибудь знает как лучше это исправить?
Вообще не вешать коллайдер на такие достаточно мелкие объекты как бордюры. Для лестниц и прочего ступенчатого хорошо подходит конвексный меш коллайдер либо кастомный объект коллизии аля "невидимая стена", его можно создавать в том же пробилдере без проблем
Madware
> Для лестниц и прочего ступенчатого хорошо подходит конвексный меш коллайдер
Достаточно просто бокса. На видео, кажется, было это видно. И вот на этом боксе лестницы персонаж очень подпрыгивает.
Тема в архиве.