Jump to content
UnitySpain

Aceptamos donaciones vía Paypal.

UnitySpain.com es un servicio gratuito, pero mantener la Comunidad conlleva una serie de gastos.

Fondo Anual Unityspain: Donados 0€ de 150,00€

  • Servidor: Dominio.com y Hosting Web
  • Mantenimiento de los Foros
  • Contenido y Servicios Extras
  • Mantenimiento para Redes Sociales
gonzilla

Direccion de movimiento

Recommended Posts

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;

        }
    }
}

 

Edited by pioj
uso de tags y <> para pegar código.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

Lo de no lo pillo no iba por ahí. Lo que no entiendo es porqué esa velocidad de rotación.

Share this post


Link to post
Share on other sites
On ‎04‎/‎08‎/‎2016 at 21:51, gonzilla said:

Lo 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;

        }
    }
}

 

Share this post


Link to post
Share on other sites

×
×
  • Create New...