2012-03-10 13 views
6

Estoy comenzando mi desarrollo usando Unity. que estoy haciendo algo por el estilo:Unity3D C# calcule el avance correcto después de la rotación

if(Input.GetKey(KeyCode.A))newValues[1]-=this.turnSpeed*(float)Time.deltaTime; 
    if(Input.GetKey(KeyCode.D))newValues[1]+=this.turnSpeed*(float)Time.deltaTime; 
    transform.Rotate(0, newValues[1], 0); 


    if(Input.GetKey(KeyCode.W))newValues[0]+=this.speed*transform.forward.z*(float)Time.deltaTime; 
    if(Input.GetKey(KeyCode.S))newValues[0]-=this.speed*transform.forward.z*(float)Time.deltaTime; 


    transform.position = new Vector3(transform.position.x, transform.position.y, (float)newValues[0]); 

Así que gire y me puedo mover, pero se mueve justo a la línea Z, sé que estoy llamando el movimiento específico Z. Pero con Javascript que puedo hacer algo

 transform.forward+=this.speed*transform.forward*(float)Time.deltaTime; 

Así que no necesito hacer el nuevo proceso de vectores y copiar a una variable independiente y funciona como un encanto, mediante la rotación y utilizando como orientación a sí mismo cuando está rotado

+0

Probablemente debería editar el título y la etiqueta. La etiqueta de unidad como se usa hace referencia al contenedor de inyección de dependencia en el bloque de aplicación MS. Probablemente se esté refiriendo a unity-3D, también si esto es para juegos, es posible que desee agregar una etiqueta adecuada. – Tod

+0

¿Qué sucede si coloca 'transform.forward + = this.speed * transform.forward * (float) Time.deltaTime;' en el código C#? El Javascript y C# compilan cada uno en el mismo lenguaje intermedio .NET, por lo que casi todo lo posible en uno es posible en el otro, si está codificado de forma un poco diferente. –

+0

No funciona, es una variable de solo lectura – Lefsler

Respuesta

7

puede malinterpretar el uso de transform.forward. transform.forward es solo un vector que le indica en qué dirección se encuentra su objeto gameObject, depende de transform.rotation.

Si desea mover su GameObject, utilice siempre transform.position:

transform.position += this.speed * transform.forward * (float)Time.deltaTime; 
+1

Gracias, pero ¿cómo implemento la rotación? – Lefsler

+2

hilo muy viejo, pero me gustaría revivirlo como mencionaste "Si quieres mover tu GameObject, usa siempre la posición de transformación", en realidad si el objeto del juego es un cuerpo rígido, entonces se debe mover agregando fuerza, ya que modificar directamente la transformación puede conducir a comportamientos poco realistas. Pero para cuerpos cinemáticos su declaración es verdadera – Eklavyaa

+0

tiene razón, @Eklavyaa – Chchwy

Cuestiones relacionadas