Noticias

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

Obtener el World Point desde un miniMap [Pregunta]

Iniciado por GSG3D, Octubre 03, 2017, 06:04:30 PM

Tema anterior - Siguiente tema
Octubre 03, 2017, 06:04:30 PM Ultima modificación: Octubre 04, 2017, 01:08:08 AM por GSG3D
Buenas, alguien sabe alguna utilidad (funcion) especifica para convertir las coordenas (mousePosition) dentro de un miniMap (RenderTexture) a las coordenadas reales del mundo. Lo que busco es el clasico "MoveCameraFromMiniMap". Ya investigue pero ninguno da una solución solida y mis pruebas no dieron resultado.

Lo ultimo que estaba viendo es ScreenPointToLocalPointInRectangle, pero no se muy bien su implementacion.


Saludos!

@gZone no se para que seriviria ese metodo, lo probe (por curiosidad) pero no me dio resultado.

Lo que si me dio resultado fue esto http://answers.unity3d.com/questions/23212/change-camera-position-with-minimap.html

Obviamente fue el ultimo post que vi, suerte la mia! Jaja

Octubre 04, 2017, 12:50:10 AM #2 Ultima modificación: Octubre 04, 2017, 01:07:14 AM por GSG3D
@gZone es que esta en modo orthographic (MiniMap), o no se a que te estas refiriendo o se me quemo la cabeza, el resultado te lo adjunto, y lo que habia encontrado no me convence porque depende de la resolucion y es un metodo no seguro. Asi que sigo buscando.

Uso claramente en vez de mainCamera, uso miniMapCamera. (Algo me estoy olvidando si es que lo que me decis es seguro).
 
 
 
P.D: La posicion del mouse esta dentro del miniMap en el inicio de la "proyeccion" de la camara del jugador.
 

Octubre 04, 2017, 01:12:14 AM #3 Ultima modificación: Octubre 04, 2017, 01:13:05 AM por lightbug
Es interesante el tema, SI lo pensas asi, las coordenadas a no ser que partan de world a minimap (o al reves, lo cual no es probable) no tienen sentido por si solas, es decir que tenes que relacionarlas de algun modo. Podrias primero decir de que a que pixel de pantalla corresponde el minimap, luego de ahi relacionar de donde a donde corresponde en el mundo. Una vez tengas eso, por ej un click en el pixel <650,120> (ponele) --> es el <10,50> del minimap ---> es el <20,150,0> del mundo, y haces lo que queres, en tu caso mover la camara. Un detalle, si vas a arrastrar el mouse al tener obviamente menor resolucion si el minimap es pequeño la camara puede ir de a saltos. Por eso es comun tener un "target de camara" (para lerpearla) y no modificar a la camara de una.

@lightbug es lo primero que se me ocurrio, supuestamete eso lo realiza ScreenPointToLocalPointInRectangle pero nunca funciono asi que aqui me las ingenié asi:

 
 

   public void PointerClickMiniMap()
    {
        Vector2 mousePosition = Input.mousePosition;
        Vector3[] corners = new Vector3[4];
        rect.GetWorldCorners(corners);
        Rect rectCoord = new Rect
        (
            corners[0].x,
            corners[0].y,
            corners[2].x - corners[0].x,
            corners[2].y - corners[0].y
        );
        float scaleX = (rectCoord.width * 100) / Screen.width;
        float scaleY = (rectCoord.height * 100) / Screen.height;
        float x = (mousePosition.x * 100) / (Screen.width * scaleX);
        float y = (mousePosition.y * 100) / (Screen.height * scaleY);
        Ray ray = miniMapCamera.ViewportPointToRay(new Vector3(x, y, 0));
        RaycastHit hit;
        if(Physics.Raycast(ray, out hit))
        {
            controller.transform.position = new Vector3(hit.point.x, controller.transform.position.y, hit.point.z);
        }
    }

 
 

Cita de: GSG3D date=1507081030@lightbug es lo primero que se me ocurrio, supuestamete eso lo realiza ScreenPointToLocalPointInRectangle pero nunca funciono asi que aqui me las ingenié asi:
   


ah no sabia que habia algo supuestamente dedicado a eso, igual dice: "Transform a screen space point to a position in the local space of a RectTransform that is on the plane of its rectangle. " osea si lo entendi bien (seguro que no) transforma un punto de la pantalla (dentro de un rect Transform a eleccion) a coordenadas locales de eserect transform (osea unas restas sumas de pixeles al final), es eso lo que realmente queres? quizas por eso no te andaba.(¿?)
 
 
 
 
 
 

@lightbug la cuestion es que cuando investigue mucho se referian a eso, haciendo mas calculos claro. Pero a mi nunca me funciono, asi que lo hice con la querida regla de 3 para obtener las coordenas reales del viewport xD

Cita de: GSG3D date=1507082836con la querida regla de 3
   


Jajaj nunca falla esa

Octubre 04, 2017, 09:16:06 AM #8 Ultima modificación: Octubre 04, 2017, 09:16:35 AM por GSG3D
@gZone Un simple test de lo que mencionas hace la correcta conversion de coordenadas, pero en el mundo se muestra desfado la posicion, y aunque lo modifique con un offset no se arregla (incorrectas posiciones segun voy pulsado), y menos cuando se cambia la resolucion.

Con lo que hice se translada a la correcta posicion. Debe haber algo detras que me estoy olvidando para que no funcione lo que me dices.

Dejo los archivos adjuntos para resolver la cuestion.

 
 

 
//www.unityspain.com/applications/core/interface/file/attachment.php?id=10884" data-fileid="10884" rel="">Assets.rar

@gZone Ahora entiendo lo que querias decir, la cuestion es que me es mas facil trabajar con un TextureRender y por eso utilizo esto.

Muchas gracias por tu explicacion igualmente! Saludos!

@gZone ah genial, ahora modifique la UI para que de resultado, muchas gracias por tu tiempo. El tema porque utlizo canvas es porque me resulta mas comodo para con otros eventos del juego, pero aun estoy verde en ese aspecto. Gracias!

Etiquetas: