En estos días estoy tratando de crear un controlador de caracteres 2D con unidad (usando física). Soy bastante nuevo en los motores físicos y es realmente difícil obtener la sensación de control que estoy buscando. Estaría muy feliz si alguien pudiera sugerir una solución para un problema que estoy encontrando:
Este es mi FixedUpdate en este 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);
}
Estoy tratando de mover el cuerpo rígido aplicando una gravedad y una fuerza lineal para izquierda y derecha. He configurado un material físico que no hace rebotar y 0 fricción cuando se mueve y 1 fricción con el modo detenido. El principal problema es que tengo colisionadores con pendientes y la velocidad cambia de subir (más lento), bajar la pendiente (más rápido) y caminar en un colisionador recto (normal). ¿Cómo podría solucionarse esto? Como ve, estoy aplicando siempre la misma velocidad para el eje x.
Para el jugador lo tengo configurado con una esfera en la posición de los pies que es el cuerpo rígido al que estoy aplicando fuerzas.
Cualquier otro consejo que pueda hacerme la vida más fácil con esto es bienvenido :).
PD Al llegar a casa, me di cuenta de que podía resolver esto aplicando una fuerza constante paralela a la superficie por la que camina el jugador, pero no sé si es el mejor método.