Noticias

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

Objetos salgan por los lados de la pantalla

Iniciado por Oaken3d, Agosto 12, 2015, 11:53:44 PM

Tema anterior - Siguiente tema
ok tengo una duda sobre como hacer que los enemigos salgan por los lados de la pantalla, bueno en realidad ya los eh echo con unos transforms poniendolos fuera de la pantalla los enemigos se generan en la posicion de los tranforms y siguen su rumbo sin ningun problema, pero mi duda es como yo puedo posicionar ese transform en las partes de los lados de la pantalla en cuanto el script se ejecute, en fin, lo que quiero es que esos transfoms se posicionen en la posicion correcta dependiendo de el tamano de la pantalla de el dispositivo mobil, ya eh tratado de usar Camera.pixelWidth pero me manda los puntos bien lejos, me manda los puntos muy lejos, tambien eh usado Screen.width pero tambine no me funciona, a lo que veo es que tengo que usar algun ScreenToViewportPoint o algo asi pero como obtengo los numeros 1,1 tengo la duda en como se pueda usar esa funcion, si alguien me podria mostrar como es como funciona lo agradeceria mucho, gracias

Para conseguir las unidades en base a los píxeles de pantalla, tienes que convertirlos utilizando la cámara que uses por la profundidad z. Yo utilizo esto para 3D:    private void setScreenLimits(Camera c) {
        Vector3 p1 = c.ScreenToWorldPoint(new Vector3(0f, 0f, c.transform.position.z));
        Vector3 p2 = c.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, c.transform.position.z));        this.screenLimit = new Rect(-p1.x, p1.y, Mathf.Abs(p1.x * 2f), p1.y * -2f);
    }Esto crea un Rect screenLimit con las pos (0,0) y width/height en unidades.

Agosto 13, 2015, 04:47:09 AM #2 Ultima modificación: Agosto 13, 2015, 05:06:43 AM por Oaken3d
bueno creo que ando muy bruto hoy que aun sigo sin entender muy bine, creo entender el concepto pero no lo puedo hacer andar en la practica, hice un script para probar el codigo que me pasaste y quedo mas o menos asi, pero no me sale el cuadro en la pantalla
 Vector3 p1 = mainCamera.ScreenToWorldPoint(new Vector3(0f, 0f, mainCamera.transform.position.z));
        Vector3 p2 = mainCamera.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, mainCamera.transform.position.z));

        Rect screenLimit = new Rect(-p1.x, p1.y, Mathf.Abs(p1.x * 2f), p1.y * -2f);

        GUI.Box(screenLimit, "text");
 este es una parte de el codigo que estoy tratando de hacer y solo me sales los dos puntos muy lejos de los lados
surfacePointLeft.position = mainCamera.ScreenToViewportPoint(new Vector3(0f, .0f, mainCamera.transform.position.z));
surfacepointRight.position = mainCamera.ScreenToViewportPoint(new Vector3(Screen.width, 0f, mainCamera.transform.position.z));
 

Agosto 13, 2015, 05:18:36 AM #3 Ultima modificación: Agosto 13, 2015, 05:18:55 AM por Oaken3d
oh ya vi el problema, estoy usando ScreenToViewportPoint y deberia estar usando SceenToWorldPoint

Pero es que los GUI.Box van con píxeles. Lo que te he pasado convierte de píxeles a unidades, que es la medida independiente de pantalla. Además no deberías trabajar con ese GUI ya y utilizar el nuevo a partir de la 4.6 o te vas a liar bien.

ok ok, solo era una prueba, ahora ya lo puse a pruba en el juego y me funciona de maravilla muchas gracias por la ayuda

Etiquetas: