В эти дни я пытаюсь создать 2D-контроллер персонажа с единством (используя физику). Я довольно плохо знаком с физическими двигателями, и мне действительно сложно почувствовать, что я ищу. Я был бы очень рад, если бы кто-нибудь мог предложить решение для проблемы, которую я нахожу:
Это мое FixedUpdate прямо сейчас:
public void FixedUpdate()
{
Vector3 v=new Vector3(0,-10000*Time.fixedDeltaTime,0);
_body.AddForce(v);
v.y=0;
if(state(MovementState.Left))
{
v.x=-_walkSpeed*Time.fixedDeltaTime+v.x;
if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=-_maxWalkSpeed;
}
else if(state(MovementState.Right))
{
v.x= _walkSpeed*Time.fixedDeltaTime+v.x;
if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=_maxWalkSpeed;
}
_body.velocity=v;
Debug.Log("Velocity: "+_body.velocity);
}
Я здесь пытаюсь просто переместить твердое тело, применяя гравитацию и линейную силу для левых и правых. У меня настроить PHYSIC материал, который не имеет никакого раскачивания и 0 трения при движении и 1 трение с подставкой еще. Основная проблема заключается в том, что у меня есть коллайдеров с наклонами и изменения скорости от подходя (медленнее), идя вниз по склону (быстрее) и ходить по прямой коллайдера (нормальный). Как можно это исправить? Как вы видите, я применяю Allways одинаковую скорость для оси х.
Для игрока у меня есть его установка со сферой в положении ног, что является Rigidbody я применяю силу к.
Любой другой совет, который мог бы сделать свою жизнь проще с этим приветствуются :).
PD В то время как возвращение домой, я заметил, что я мог бы решить эту проблему применения постоянной силы параллельно поверхности игрок ходит, но не знаю, если это лучший способ.