Jump to content
UnitySpain
GSG3D

Obtener el World Point desde un miniMap [Pregunta]

Recommended Posts

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!

Edited by GSG3D

Share this post


Link to post
Share on other sites

@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.

Sin título.png

Edited by GSG3D

Share this post


Link to post
Share on other sites

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.

Edited by lightbug

Share this post


Link to post
Share on other sites

@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);
        }
    }

 

Share this post


Link to post
Share on other sites
7 hours ago, GSG3D said:

@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.(¿?)

 

 

 

Share this post


Link to post
Share on other sites

@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

Share this post


Link to post
Share on other sites

@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.
 

Sin título.png

Assets.rar

Edited by GSG3D

Share this post


Link to post
Share on other sites

@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!

Share this post


Link to post
Share on other sites

@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!

Share this post


Link to post
Share on other sites

×
×
  • Create New...