Otros lugares, otras opciones :: Sin clasificar :: Unity3D Script help
Hola,
Uso el programa Unity 5. Estaba haciendo un escenario de la ciudad de blade runner. Con una patrulla aérea, quería desplazarme entre los edificios. Quienes hayan visto la película, podrán recordar cómo se mueve dicho vehículo. Algo así como un dron. Así que me pongo a ello y reciclando código de un tutorial de la página de Unity y cacharreando con lo poco que he aprendido de programación, consigo que el vehículo se desplaze a una velocidad constante y que al pulsar el cursor, tanto a la izda. como a la dcha. el vehículo gira sobre su eje z al tiempo que se desplaza ligeramente por el eje x sin dejar de avanzar. Después de un grito de júbilo, no tardo en darme cuenta de que no puedo girar para cambiar de rumbo y trato de hacer que en vez de moverse lateralmente, gire sobre el eje y al mismo tiempo que quiero que mantenga el otro giro sobre el eje z. Y ahí comienzan los quebraderos de cabeza. He mirando mil tutoriales, varias veces el manual de la página de Unity (AddTorque, transform.rotate, etc...), pero me resulta imposible. Ahora, a punto de darle una patada al ordenador y abandonar el asunto, os pongo el código por si alguien sabe cómo resolver el entuerto.
using UnityEngine;
using System.Collections;
public class Moviendo : MonoBehaviour
{
public float speed; //valor para la velocidad de avance
public float vspeed; //valor para la velocidad de ascenso/descenso
public float tilt; //valor para el giro sobre el eje z
public float tilty; //valor para el giro sobre el eje y
void Update ()
{
//esto es para dar distintas velocidades constantes.
if (Input.GetKey ("z"))
speed = 7;
if (Input.GetKey ("x"))
speed = -3;
if (Input.GetKey ("c"))
speed = 0;
//Con esto puedo hacer subir y bajar el vehículo mientras avanza
if (Input.GetKey ("q"))
{
transform.Translate (0, vspeed*Time.deltaTime, 0);
}
if (Input.GetKey ("e"))
{
transform.Translate (0, -vspeed*Time.deltaTime, 0);
}
//Esta línea permite la velocidad constante sin usar el rigidbody
transform.Translate (0, 0, speed*Time.deltaTime);
}
void FixedUpdate ()
{
float moveHorizontal = Input.GetAxis ("Horizontal");
//con este if quiero sin usar el rigidbody que gire sobre el eje y, pero queda anulado por el giro sobre el eje z del rigidbody escrito más abajo. mi idea era que funcionaran al mismo tiempo y simular un giro del vehículo cambiando de dirección al tiempo que también giraba brevemente sobre el eje z.
if (Input.GetKey (KeyCode.LeftArrow))
{
transform.Rotate(Vector3.up * -tilty, Space.World);
}
//Esto hace que gire sobre el eje z cierto grado mientras se mantenga pulsado la tecla de cursor (izda ó dcha.) y mientras haya algo de movimiento de avance.
Vector3 movement = new Vector3 (moveHorizontal, 0.0f, 0.0f);
GetComponent<Rigidbody>().velocity = movement * speed;
GetComponent<Rigidbody>().rotation = Quaternion.Euler (0.0f, 0.0f, GetComponent<Rigidbody>().velocity.x * -tilt);
}
}
He probado muchas combinaciones pero todas acaban igual. En fin, si alguien me puede orientar se lo agradecería mucho.
Gracias.