Variedades de coordenadas usadas na GUI do Unity3d

Por que variedades e quantas?


Muitas vezes me deparo com o fato de que as pessoas simplesmente não entendem como mover um objeto na interface do usuário por algum valor e ficam surpresas que o resultado geralmente seja imprevisível. Ou digamos como obter as coordenadas corretas do objeto na interface do usuário. Se derivarmos através do depurador a posição usual do objeto (position), será muito diferente do que vemos no inspetor do elemento UI, então o que vemos lá e como funciona? Como resultado, 100.500 soluções de fóruns estão sendo classificadas até o momento, e uma delas não funciona. Eu quero dar um movimento significativo a esses processos.

A essência da captura é a seguinte - a transformação usual tem um descendente da RectTransform, responsável pela posição e muitas coisas relacionadas ao tamanho, escala, etc. do elemento da interface do usuário. E, graças a ele, podemos obter as seguintes opções de coordenadas.

  1. posição
  2. localPosition
  3. anchoredPosition (ainda existe anchoredPosition3D, mas não o consideraremos separadamente, mas assumimos que essa é uma subespécie de test.anchoredPosition



Posição normal


A posição usual não se aplica ao sistema de coordenadas da interface do usuário a partir da palavra. Essas são algumas coordenadas comuns do objeto em todo o mundo da unidade e, no mundo, existe uma certa representação da posição do objeto que não está conectado à interface. Se você deseja mudar o objeto por sua largura, isso não funcionará, pois a tela tem coordenadas em pixels em relação à tela. E nas coordenadas globais, esses não são pixels. Portanto, o objeto mudará no mundo, digamos 200 unidades do mundo, e não 200 pixels, e voará para distâncias desconhecidas. Mas pode ser usado com sabedoria. Eu vou te contar mais tarde como.

Posição da âncora (anchoredPosition)


O que vemos no inspetor é o que é.



Em uma unidade, você pode definir pontos de ancoragem, este é um determinado ponto em relação ao qual o elemento da interface do usuário será posicionado, inclusive quando o tamanho / proporções do objeto pai forem alterados.



Aqui você pode ver que alteramos o tamanho do objeto pai e as proporções, nosso objeto adere ao centro do objeto pai e suas coordenadas não foram alteradas, embora na tela ele não esteja mais no mesmo local que antes.

Posição da âncora - as coordenadas do objeto em relação à âncora. Vamos ancorar no canto superior esquerdo e ver que as coordenadas foram alteradas.



Se você quiser mudar o objeto para sua largura, precisará alterar anchoredPosition ou localPosition. A posição local dos elementos da interface do usuário também é calculada em pixels, mas de uma maneira diferente. Portanto, se você precisar manipular dois elementos da interface do usuário em relação um ao outro. É melhor usar uma posição local. Porque assim?

Posição local (localPosition)


Então, o que exatamente é uma posição local:



Este é o sistema de coordenadas quando o centro do objeto pai é 0. O canto superior direito é a largura positiva do retângulo dividido ao meio. O canto superior esquerdo é o valor negativo da largura pela metade. Ou seja, se a largura do retângulo for de 800 pixels, no meio x = 0, no canto superior direito 400, no canto superior esquerdo -400. Portanto, se você precisar calcular as coordenadas sem levar em consideração as âncoras, é melhor usar as posições locais. Desde que eles tenham um ancestral comum / ret. A propósito, as âncoras podem ser usadas não apenas como um ponto específico no objeto pai, mas também como uma proporção em relação ao objeto pai. No segundo caso, anchoredPosition retornará localPosition.

Por que posso usar a posição usual para elementos da interface do usuário? Digamos que, dentro das coordenadas globais, se você atribuir as coordenadas do segundo a um objeto, elas estarão no mesmo ponto, independentemente de suas âncoras ou posições locais, às vezes é conveniente quando os elementos estão em tela diferente / em painéis diferentes e o sistema de coordenadas é local / âncora não corresponde.

Conclusão / Resumo


  1. No inspetor, os elementos da interface do usuário mostram posição ou proporções ancoradas em relação ao pai. AnchoredPosition é considerado dependendo da posição da âncora
  2. localPosition permite obter as coordenadas gerais em relação ao pai, sem vincular a âncoras.
  3. position - esta é a posição global do elemento no espaço da cena, não vinculada à interface do usuário.


Espero que alguém ajude :-)

Source: https://habr.com/ru/post/pt454246/


All Articles