Coordenada de pantalla UGUI a método de coordenadas UI – ScreenPointToLocalPointInRectangle

Coordenadas de la interfaz de usuario: hace referencia al campo de posición anclada del componente RectTransform

Los elementos de la interfaz de usuario rara vez están representados por coordenadas mundiales, principalmente representadas por coordenadas locales RectTransform , que involucran puntos de anclaje y puntos de pivote.

  1. ¡Las coordenadas del mouse que obtenemos en Unity son coordenadas de pantalla!
  2. ¡Las coordenadas de la pantalla y las coordenadas del mundo no son lo mismo, y las coordenadas de la pantalla y las coordenadas de la interfaz de usuario no son lo mismo!

¡Unity ofrece oficialmente un método que nos permite convertir fácilmente las coordenadas de la pantalla en coordenadas de la interfaz de usuario!

Este método es:

RectTransformUtility.ScreenPointToLocalPointInRectangle(RectTransform rect, Vector2 screenPoint, Camera cam, out Vector2 localPoint); 

Parámetro recto:

Este parámetro requiere que proporcione un RectTransform del objeto principal. Debido a que este método es para obtener las coordenadas de la interfaz de usuario y las coordenadas de la interfaz de usuario son coordenadas locales, se debe requerir un objeto principal para calcular las coordenadas locales. (Hay un objeto principal que tiene coordenadas locales, ¡verdad!)

Finalmente, este método convertirá el punto en la pantalla a las coordenadas locales debajo del objeto principal. es en quien te quieres centrar

Parámetros  punto de pantalla:

Este parámetro requiere que proporcione una coordenada de espacio de pantalla (coordenadas de pantalla). Las coordenadas de pantalla, debido a que son 2d, solo pueden ser coordenadas de pantalla. ¿Qué sucede si no son coordenadas de pantalla? Si son objetos de escena, deben convertirse a coordenadas de pantalla a través de coordenadas mundiales. Este parámetro significa que desea convertir el objeto las coordenadas de la pantalla se convierten a las coordenadas locales de RectTransform

Finalmente, este método convierte las coordenadas de la pantalla en coordenadas ui.

cámara de parámetros:

Este parámetro requiere que especifique una cámara.

Porque las coordenadas de la interfaz de usuario se determinan según la cámara. Cámara de eventos, si el modo de renderizado del lienzo es Espacio de pantalla-cámara o Espacio mundial, entonces es bueno obtener la cámara de renderizado directamente desde el lienzo. Si es Espacio de escena-Superposición, entonces este parámetro puede pasar un valor nulo nulo )

Parámetros localPoint:

Las coordenadas locales del nodo hijo en el nodo padre obtenidas por transformación son

Este parámetro requiere que proporcione un contenedor para el "valor de retorno" del método. (Si no puede entender el parámetro avanzado, puede obtener más información aquí: https://www.cnblogs.com/linfenghp/p/6618580.html )

Finalmente, este método cargará el resultado de las coordenadas de la interfaz de usuario del punto de la pantalla en esta variable. ,

También puede entenderlo de esta manera: asigna una variable Vector2 a este parámetro, y este método finalmente asignará las coordenadas de IU convertidas a la variable que especificó.

Valor de retorno - tipo bool:

Este método tiene un valor de retorno, pero yo mismo no he usado este valor de retorno (¿no se siente útil?).

La declaración oficial es: Este valor devuelto es para determinar si el punto está en el plano donde se encuentra Rect.

Devuelve verdadero si está presente.

Para resumirlo:

Proporcione un punto de coordenadas de pantalla, especifique una cámara y especifique un objeto principal.

¡Puedes obtener puntos de coordenadas de la interfaz de usuario!

    public void UpdatePosition(Vector2 screenPosition)
    {
        var canvas = this.GetTopCanvas();
        var canvasRT = canvas.gameObject.GetComponent<RectTransform>();
        var canvasCam = canvas.worldCamera;
        Vector2 position;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRT, screenPosition, canvasCam, out position);
        this.GetComponent<RectTransform>().anchoredPosition = position;
    }

Supongo que te gusta

Origin blog.csdn.net/qq_42672770/article/details/123033379
Recomendado
Clasificación