¿Cómo hacer que el personaje se agache usando el nuevo sistema de entrada?
– UnityAssets3Free
bienvenido , me llamo Camilo y aqui os traigo
esta pregunta
Estoy tratando de agregar sentadillas a mi juego en primera persona. Dado que no se necesita animación, pensé que la forma más sencilla de agacharse es bajar la altura del jugador y hacer que se mueva más lento. Estoy tratando de lograr esto usando el nuevo sistema de entrada. Aquí está mi intento:
[SerializeField] float walkSpeed = 10f;
[SerializeField] float runSpeed = 25f;
[SerializeField] float crouchSpeed = 5f;
[SerializeField] CharacterController controller;
public bool crawl;
private void Update()
if (crawl)
Crouching();
else
StandingUp();
private void Crouching()
crawl = true;
controller.height = 0.3f;
moveSpeed = crouchSpeed;
private void StandingUp()
crawl = false;
controller.height = 3f;
moveSpeed = walkSpeed;
public void OnCrawl()
crawl = true;
La parte de acción de entrada:
[SerializeField] Movement movement;
private void Awake()
controls = new PlayerControls();
groundMovement = controls.GroundMovement;
// groundMovement.[action].performed += context => do something
groundMovement.HorizontalMovement.performed += ctx => horizontalInput = ctx.ReadValue<Vector2>();
groundMovement.Crawl.performed += _ => movement.OnCrawl();
Lo que se espera es que después de presionar c el jugador se quede agachado y cuando vuelva a presionar c debería estar de regreso. Pero no funciona. todo lo que obtengo es que el botón se dispara cuando se presiona, pero en realidad no sucede nada.
Tenía una pregunta antes de que fuera respondida: ¿Cómo hacer que el personaje se ejecute usando el nuevo sistema de entrada?
pero el requisito aquí es un poco diferente. a diferencia de correr, aquí no quiero que el usuario mantenga presionada una tecla para agacharse. Quiero que sea un clic que cambie el estado de caminar a agacharse y viceversa.
Resultados actuales:
al probar el código actual puedo ver el valor crawl
ser etiquetado cuando presiono c
pero cuando lo presiono de nuevo no está desmarcado. y la altura del carácter no cambia como debería.
1 respuesta 1
Esta es una solución optimizada para eso. Al presionar la tecla, simplemente ejecute el código de cambio de fase de seguimiento. El resto de cambios dependerá de la clase de movimiento.
public bool crawl;
public void CrawlChange()
crawl = !crawl;
if (crawl)
controller.height = 0.3f;
moveSpeed = crouchSpeed;
else
controller.height = 3f;
moveSpeed = walkSpeed;
Desde el código de control, llame a este código presionando la tecla de seguimiento especial. Además, esta coordinación no necesita estar en la actualización para evitar un procesamiento innecesario en cada cuadro.
groundMovement.Crawl.performed += ctx => movement.CrawlChange(); // switch crawl phase
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
eso es todo,espero que te halla servido