Oggi sto cercando di creare un controller di caratteri 2D con unità (usando la fisica). Sono abbastanza nuovo per i motori fisici ed è davvero difficile ottenere la sensazione di controllo che sto cercando. Sarei davvero felice se qualcuno potesse suggerire la soluzione di un problema che sto riscontrando:
Questo è il mio FixedUpdate in questo momento:
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);
}
Sto provando qui a spostare il corpo rigido applicando una gravità e una forza lineare per sinistra e destra. Ho installato un materiale fisico che non fa rimbalzare e 0 attriti durante lo spostamento e 1 attrito con fermo. Il problema principale è che ho collider con pendenze e la velocità cambia salendo (più lentamente), scendendo (più velocemente) e camminando su un collider dritto (normale). Come potrebbe essere risolto? Come vedi sto applicando sempre la stessa velocità per l'asse x.
Per il giocatore l'ho impostato con una sfera in posizione piedi che è il corpo rigido a cui sto applicando le forze.
Ogni altro suggerimento che potrebbe semplificarmi la vita è ben accetto :).
PD Mentre tornavo a casa ho notato che avrei potuto risolvere questo problema applicando una forza costante parallela alla superficie su cui cammina il giocatore, ma non so se sia il metodo migliore.