Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: gonzilla en Agosto 03, 2016, 03:33:20 AM

Título: Direccion de movimiento
Publicado por: gonzilla en Agosto 03, 2016, 03:33:20 AM
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;
        }
    }
}

 
 
Título: Direccion de movimiento
Publicado por: iRobb en Agosto 03, 2016, 08:29:12 AM
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.
Título: Direccion de movimiento
Publicado por: Braltor en Agosto 03, 2016, 05:38:26 PM
la multiplicacion de quaternions suma las rotaciones
Título: Direccion de movimiento
Publicado por: iRobb en Agosto 04, 2016, 02:55:24 AM
Lo de no lo pillo no iba por ahí. Lo que no entiendo es porqué esa velocidad de rotación.
Título: Direccion de movimiento
Publicado por: gonzilla en Agosto 04, 2016, 09:51:24 PM
Lo solucione metiendo el objeto en un empty. Ahora si empieza en la direccion que quiero.
Título: Direccion de movimiento
Publicado por: kaito en Agosto 05, 2016, 10:21:15 PM
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;
        }
    }
}