Comencé un nuevo juego que no requiere mouse, dejando así el movimiento hasta el teclado. He intentado incorporar 8 direcciones; arriba, izquierda, derecha, arriba-derecha, etc. Sin embargo, cuando presiono más de una tecla de flecha, la velocidad de movimiento se acumula ( http://gfycat.com/CircularBewitchedBarebirdbat ). ¿Cómo podría contrarrestar esto?
Aquí está la parte relevante de mi código:
var speed : int = 5;
function Update () {
if (Input.GetKey(KeyCode.UpArrow)) {
transform.Translate(Vector3.forward * speed * Time.deltaTime);
} else if (Input.GetKey(KeyCode.UpArrow) && Input.GetKey(KeyCode.RightArrow)) {
transform.Translate(Vector3.forward * speed * Time.deltaTime);
} else if (Input.GetKey(KeyCode.UpArrow) && Input.GetKey(KeyCode.LeftArrow)) {
transform.rotation = Quaternion.AngleAxis(315, Vector3.up);
}
if (Input.GetKey(KeyCode.DownArrow)) {
transform.Translate(Vector3.forward * speed * Time.deltaTime);
}
}
unity
javascript
movement
eren_tetik
fuente
fuente

Respuestas:
Separe su código de selección de dirección del código de movimiento real.
Directionmarcando qué teclas se presionan. Almacénelo como un vector unitario (normalizado).DirectionconSpeedy conDeltaTime.fuente
Debe tomar la suma de las direcciones, normalizar eso y luego multiplicar por la velocidad.
Respondí tangencialmente esto como parte de mi respuesta a Prevenir el movimiento diagonal
Específicamente:
fuente
El "vector de dirección normalizado" es la forma en que generalmente se aborda esta tarea, y cómo lo hago a menudo, pero últimamente simplemente he estado sujetando el vector de movimiento resultante. Por lo general, logra el mismo resultado final y el código es mucho más simple:
El código más simple es casi siempre mejor: E
fuente
ClampMagnitude, no es el mismo código queNormalize * Constanten el disfraz?moveSpeeddespués de la fijación y posiblemente lo fusionaría con la multiplicación pordeltaTime.