Obecnie próbuję stworzyć kontroler postaci 2D z jednością (za pomocą fizyki). Jestem dość nowy w silnikach fizycznych i naprawdę trudno jest uzyskać kontrolę, której szukam. Byłbym bardzo szczęśliwy, gdyby ktoś mógł zaproponować rozwiązanie problemu, który znajduję:
To jest teraz moja 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);
}
Próbuję tu po prostu przesunąć sztywne ciało przy użyciu siły grawitacji i siły liniowej dla lewej i prawej. Mam ustawiony materiał fizyczny, który nie powoduje podskakiwania i 0 tarcia podczas ruchu i 1 tarcie przy bezruchu. Głównym problemem jest to, że mam zderzaki ze zboczami, a prędkość zmienia się od wchodzenia w górę (wolniej), schodzenia w dół zbocza (szybciej) i chodzenia po prostym zderzaku (normalny). Jak można to naprawić? Jak widać, zawsze stosuję tę samą prędkość dla osi x.
Dla gracza mam to ustawienie z kulą w pozycji stóp, która jest sztywnym ciałem, do którego przykładam siły.
Wszelkie inne wskazówki, które mogłyby ułatwić mi życie, są mile widziane :).
PD Wracając do domu zauważyłem, że mogę rozwiązać ten problem, stosując stałą siłę równoległą do powierzchni, po której idzie gracz, ale nie wiem, czy to najlepsza metoda.