Tengo un problema recurrente, varias veces he hecho algún código para mover el jugador utilizando el Character Controller pero a la hora de aplicar gravedad, doy con un problema.
A diferencia del controlador de rigid body, el character controller no tiene physic materials, así que cuando este colisiona no hay deslizamiento, eso hace que mi personaje, al pasar por algún bordillo se quede atascado en el aire (a menos que vaya corriendo, entonces la velocidad de desplazamiento es tan alta que al caer está más alejado del borde y no colisiona). Pero aunque parezca un caso raro, resulta que ocurre mucho cuando lo pruebo, jugando a escalar y bajar, muchas veces se me queda el personaje congelado ahí por esto mismo. (Como no puede bajar hasta el suelo, se queda congelado con la animación de caida en el estado de caida).
(https://images-wixmp-ed30a86b8c4ca887773594c2.wixmp.com/f/781b9a6c-c06a-4e28-8a72-3d34ab0781ad/ddlgek1-c3bab7b3-9736-4bc4-bd49-1fe0a18a548e.jpg?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1cm46YXBwOjdlMGQxODg5ODIyNjQzNzNhNWYwZDQxNWVhMGQyNmUwIiwiaXNzIjoidXJuOmFwcDo3ZTBkMTg4OTgyMjY0MzczYTVmMGQ0MTVlYTBkMjZlMCIsIm9iaiI6W1t7InBhdGgiOiJcL2ZcLzc4MWI5YTZjLWMwNmEtNGUyOC04YTcyLTNkMzRhYjA3ODFhZFwvZGRsZ2VrMS1jM2JhYjdiMy05NzM2LTRiYzQtYmQ0OS0xZmUwYTE4YTU0OGUuanBnIn1dXSwiYXVkIjpbInVybjpzZXJ2aWNlOmZpbGUuZG93bmxvYWQiXX0.Ex6D7RqC7lsrKtpj0Qo7DAeOUkpS278nRBvAh6gq1sU)
En el Update, para el movimiento había intentado esto:
//Move
if ((AllowControls) && (GravState == GravityState.Land))
{
moveDirection = vertical * (Vector3.Scale(cam.forward, new Vector3(1, 0, 1)).normalized) + horizontal * cam.right;
IsMoving = (moveDirection.magnitude > 0.1f)? true : false;
moveDirection.Normalize();
moveDirection = transform.InverseTransformDirection(moveDirection);
}
if ((GravState == GravityState.Falling) || (GravState == GravityState.FreeFalling))
{
//moveDirection = transform.forward * 0.02f * Time.deltaTime;
}
moveDirection.y = moveDirection.y - verticalDirection;
Esa línea que esta comentada, pretendía mover al jugador hacia delante (y después un poco hacia abajo) en caso de que estuviera cayendo, pero la cosa tampoco me funciona, al activarla, el personaje va haciendo glitches hasta llegar al suelo, (como si se saliese del estado de caída y volviese a entrar continuamente).
También probé reducir el tamaño de la cápsula (está a 0.4 y la puse a 0.2) efectivamente reduce las veces en las que este problema se da, pero me causa otros problemas de clipping en la animación de esacalada (el personaje entra más de lo que está previsto y escala con las piernas hundidas en el bloque), así que lo he vuelto a poner a 0.4 para que haya más espacio entre la colisión y el origen del jugador.
¿Alguien se le ocurre alguna manera de como enfocar esto? No creo que sea algo que sólo me pase a mi, ¿como se suele solventar este problema con los bordillos? O_ò
Pongo aquí el código del jugador que estoy escribiendo en spoiler porque es un poco largo.