Alguien sabe cuales son las contraposiciones a Forward , Up y Left? Es que tengo este script y no he podido hacer que inicie sin seguir la direccion local('¿). Liberarlo de su direccion standard, que pueda iniciar mirando hacia donde yo gire el dron. Apenas doy Play, se gira hacia la derecha ,no importa que lo haya girado a la direccion que deseo que siga.
using UnityEngine;
using System.Collections;
public class DronX : MonoBehaviour
{
public float normalMoveSpeed = 10;
private float rotationX = 0.0f;
private float rotationY = 0.0f;
void Update ()
{
rotationX += Input.GetAxis("Mouse X") * normalMoveSpeed * Time.deltaTime;
rotationY += Input.GetAxis("Mouse Y") * normalMoveSpeed * Time.deltaTime;
rotationY = Mathf.Clamp (rotationY , -90, 90);
transform.localRotation = Quaternion.AngleAxis(rotationX, Vector3.up);
transform.localRotation *= Quaternion.AngleAxis(rotationY, Vector3.left);
{
transform.position += transform.forward * normalMoveSpeed * Input.GetAxis("Vertical") * Time.deltaTime;
}
}
}
Las posiciones opuestas son el vector en negativo (-vector3.forward, etc.). El objeto que tienes se va a orientar siempre hacia Vector3.up y Vector3.left que son los ejes, Si quieres que se oriente hacia donde giras, utiliza la dirección donde apunte un vector, no el de los ejes. Ya lo haces bien con la posición con el transform.forward, que es la z donde apunta. El localRotation ese multiplicado no lo pillo.
la multiplicacion de quaternions suma las rotaciones
Lo de no lo pillo no iba por ahí. Lo que no entiendo es porqué esa velocidad de rotación.
Lo solucione metiendo el objeto en un empty. Ahora si empieza en la direccion que quiero.
Cita de: gonzilla date=1470340284Lo solucione metiendo el objeto en un empty. Ahora si empieza en la direccion que quiero.
Ese script lo que hace es mover el objeto en la dirección en la que mira, considerando los 3 ejes de coordenadas: x, y, z.
Si lo he entendido bien, lo que quieres es mover el objeto solo en el plano x,z, sin modificar su altura y, ignorando el cabeceo o rotación en x.
Entonces, lo que tienes que hacer es multiplicar o escalar transform.forward por el vector que representa el plano x,z, es decir, (1,0,1).
using UnityEngine;
using System.Collections;
public class mover : MonoBehaviour
{
public float normalMoveSpeed = 10;
private float rotationX = 0.0f;
private float rotationY = 0.0f;
private Vector3 planoXZ = new Vector3(1f,0f,1f);
void Update()
{
rotationX += Input.GetAxis("Mouse X") * normalMoveSpeed;
rotationY += Input.GetAxis("Mouse Y") * normalMoveSpeed;
rotationY = Mathf.Clamp(rotationY, -90, 90);
transform.localRotation = Quaternion.AngleAxis(rotationX, Vector3.up);
transform.localRotation *= Quaternion.AngleAxis(rotationY, Vector3.left);
{
transform.position += Vector3.Scale(transform.forward, planoXZ) * normalMoveSpeed * Input.GetAxis("Vertical") * Time.deltaTime;
}
}
}