Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Rotacion de camara o vista isometrica

Iniciado por Carlos de angeli, Marzo 25, 2018, 04:02:23 PM

Tema anterior - Siguiente tema
Marzo 25, 2018, 04:02:23 PM Ultima modificación: Marzo 25, 2018, 04:03:09 PM por Carlos de angeli
Hola,  soy nuevo en este foro y aún no entiendo bien como se manejan aquí por eso espero que puedan ayudarme.  Mi petecion es que necesito que alguen pueda decirme como hago para poder programar una camara como la del simcity 4.. Se programar la vista isometrica a mi gusto,  se programar el movimiento o desplazamiento de la camara,  pero no puedo programar la rotación. Lo que pido es que alguien me de un ejemplo o el script para hacerlo.  Mi mecanica sería la misma que el SimCity4, qur al hacer click en las flechas (derecha o izquierda)  la camara rote.  Ni mas ni menos,  solo es.  Desde ya muchas gracias. 

para no preocuparse x rotaciones de camara isometrica lo mejor es poner el mundo en un pivote y rotarlo... solo toma en cuenta de poner el pivote bajo la camara y no al centro o va a girar mucho

Marzo 26, 2018, 04:34:05 PM #2 Ultima modificación: Marzo 26, 2018, 04:34:57 PM por TheBullet
@Braltor Diría que es mucho más fácil rotar una cámara que el mundo entero no?
 
@Carlos de angeli Eso es muy fácil de hacer:
 
1- Crea un GameObject vació en la escena

2- Resetea la posición, la rotación y la escala del objeto vacío.

3- Pon la cámara como hijo del objeto vacío.

4- Pon la cámara en esta posición LOCAL: 0, 0, -100 (puedes adaptar la distancia local de Z para acercar o alejar la cámara).

5- Resetea la rotación y la escala de la cámara.

6- Pon la rotación del gameobject que has creado a 45, 0, 0 (puedes ponerlo a tu gusto, con esto controlas la caída de la cámara). Puedes cambiar también la rotación de Y a 45 si te gusta más.

7- Haz los cambios necesarios en tu script de movimiento de cámara para que en vez de mover la cámara, mueva el nuevo padre de la cámara que hemos creado.
 
 
 
Crea un nuevo script y añádelo al padre de la cámara. Asigna las funciones RotarDerecha y RotarIzquierda a tus botones de rotación y ya lo tienes. No lo he probado pero te tendría que quedar una rotación de PM.
 

   bool rotando = false;
    float rotacion = 0;
    public float lerpTime = 2; //Ajusta esto para ajustar la velocidad de rotacion.
    float currentLerpTime;
    private void Awake()
    {
        //Guardamos la rotación inicial de cámara
        rotacion = transform.eulerAngles.y;
    }
    /// <summary>
    /// Click en botón flecha derecha
    /// </summary>
    public void RotarDerecha()
    {
        //Evitamos que se de más de una orden a la vez
        if (rotando == false)
        {
            rotacion += 90;
            rotando = true;
        }
    }
    /// <summary>
    /// Clic en botón flecha izquerda
    /// </summary>
    public void RotarIzquierda()
    {
        //Evitamos que se de más de una orden a la vez
        if (rotando == false)
        {
            rotacion -= 90;
            rotando = true;
        }
    }
    private void LateUpdate()
    {
        //Si se ha clicado en un botón de rotación, entraremos dentro de este if.
        if (rotando == true)
        {            
            if (currentLerpTime < lerpTime)
                currentLerpTime += Time.unscaledDeltaTime;
            if (currentLerpTime > lerpTime)
                currentLerpTime = lerpTime;
            //Hacemos estos calculos para suavizar el Lerp y evitar que sea lineal.
            float t = currentLerpTime / lerpTime;
            t = t * t * t * (t * (6f * t - 15f) + 10f);
            float rotacionActual = Mathf.LerpAngle(transform.eulerAngles.y, rotacion, t);
            transform.eulerAngles = new Vector3(transform.eulerAngles.x, rotacionActual, transform.eulerAngles.z);
            //Si el current lerp time y el lerp time son iguales, el movimiento de rotación ha finalizado.
            if (currentLerpTime == lerpTime)
                rotando = false;
        }
    }

 
 
 
Saludos

 

Cita de: TheBullet date=1522074845Diría que es mucho más fácil rotar una cámara que el mundo entero no?
   


no siempre, aqui en el foro han aparecido algunos casos en los q por la logica de control de la camara es mas complicado rotarla... pero si tiene la posibilidad de hacerlo puede rotar alrededor del eje Y: https://docs.unity3d.com/ScriptReference/Transform.RotateAround.html
 
en este caso si la camara puede tener vista de aguila, puede ponerla en un pivote y rotar este pivote

Etiquetas: