Цього дня я намагаюся створити двовимірний контролер символів з єдністю (використовуючи фізику). Я досить новачок у фізичних двигунах, і мені дуже важко отримати управління, яке я шукаю. Я був би дуже радий, якби хто-небудь міг запропонувати рішення проблеми, яку я знаходжу:
Це мій 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);
}
Я намагаюся тут просто перемістити жорстке тіло, застосовуючи силу тяжіння та лінійну силу вліво і вправо. У мене встановлено фізичний матеріал, який не робить підстрибування та 0 тертя при русі та 1 тертя з нерухомим положенням. Основна проблема полягає в тому, що у мене є зіткнення зі схилами, і швидкість змінюється від підйому вгору (повільніше), спуску по схилу (швидше) і ходіння по прямому колайдеру (нормально). Як це можна було виправити? Як ви бачите, я застосовую завжди однакову швидкість для осі x.
Для гравця у мене це налаштування зі сферою на ногах, це жорстке тіло, до якого я застосовую сили.
Будь ласка, вітаємо будь-яку іншу пораду, яка могла б полегшити мені життя :).
П.Д. Приходячи додому, я помітив, що міг би це вирішити, застосовуючи постійну силу, паралельну поверхні, по якій грає ходити, але не знаю, чи це найкращий метод.