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