En este momento estás viendo mover a la última dirección presionada sin movimiento diagonal

 – Unity

mover a la última dirección presionada sin movimiento diagonal – Unity

mover a la última dirección presionada sin movimiento diagonal

– UnityAssets3Free

hola , soy juansito y para hoy os traigo
nueva pregunta

Actualmente estoy trabajando en algunos movimientos de jugadores. La idea principal de mi jugador se mueve solo horizontal y verticalmente, no en diagonal. No pude encontrar ninguna solución razonable a este problema. Realmente no quiero usar rigidbody o character.controller por ahora. La otra cosa que quiero lograr es que cuando presiono varias teclas de flecha, quiero que mi jugador se mueva directamente a la última dirección presionada. Aquí está mi código:

using UnityEngine;
using System.Collections;


public class controller : MonoBehaviour 
    public int movementspeed;
    // Use this for initialization
    void Start () 

    

    // Update is called once per frame
    void Update () 


        if (Input.GetKey (KeyCode.A))  
            //ratation
            transform.localEulerAngles = new Vector3(0,270,0);
            //move
            transform.Translate (transform.right * movementspeed * Time.deltaTime); 

        
        else if(Input.GetKey (KeyCode.D)) 
            //ratation
            transform.localEulerAngles = new Vector3(0,90,0);
            //move
            transform.Translate (transform.right *(-1)* movementspeed * Time.deltaTime);


        
        else if(Input.GetKey (KeyCode.S)) 
            //ratation
            transform.localEulerAngles = new Vector3(0,180,0);
            //move
            transform.Translate (transform.forward * (-1) * movementspeed * Time.deltaTime);
        
        else if (Input.GetKey (KeyCode.W)) 
            //ratation
            transform.localEulerAngles = new Vector3(0,0,0);
            //move
            transform.Translate (transform.forward * movementspeed * Time.deltaTime); 

        
        else if (Input.GetKey (KeyCode.A))  
            //ratation
            transform.localEulerAngles = new Vector3(0,270,0);
            //move
            transform.Translate (transform.right * movementspeed * Time.deltaTime); 

        
    

1 respuesta 1

La estructura de su declaración de selección no le dará esta funcionalidad. Dado que verificará el primer si, luego si es falso, verificará el siguiente si, y así sucesivamente. Entonces, si presiono A, no importa lo que presione, siempre llegaré a la parte A del código.

Lo que haría si fuera tú es agregar otra capa encima de eso. Solo detecte eventos clave y configure las variables correspondientes. Al configurarlos, deshabilite los demás. Luego usa esas variables para moverte. Así:

bool left, right, up, down;
void CheckInput() 
    if (Input.GetKeyDown(KeyCode.W) 
        up = true;
        left = right = down = false;
    
    if (Input.GetKeyDown(KeyCode.S) 
        down = true;
        left = right = up = false;
    
    if (Input.GetKeyDown(KeyCode.A) 
        left = true;
        right = up = down = false;
    
    if (Input.GetKeyDown(KeyCode.D) 
        right= true;
        left= up = down = false;
    
    //And then do matching OnKeyUp events to set them false


void Update() 
    CheckInput();
    if (left)
        //Move left
    if (right)
        //Move right
    //etc.

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

por hoy,espero que te funcione

Deja una respuesta