Coisas que eu quero fazer
Este artigo fornece soluções para quando a conversão de coordenadas da tela (Input.mousePosition) para coordenadas do mundo não funciona corretamente.
premissa
O modo de renderização da tela é Espaço da Tela – Sobreposição
As coordenadas mundiais obtidas são usadas para especificar a localização na interface do usuário.
Exemplos do que não funcionou
Tentei o seguinte código depois de pesquisá-lo online, mas não funcionou.
(O processo não falhou; em vez disso, o valor desejado não pôde ser obtido.)
Camera.main.ScreenToWorldPoint(Input.mousePosition);contramedida?
Pelo modo como funciona, parece que ao usar Espaço da Tela – Sobreposição com coordenadas do mundo, as coordenadas do mundo são iguais às coordenadas da tela.
No entanto, li os documentos oficiais e outros materiais, mas não encontrei nenhuma seção que afirmasse isso explicitamente.
contramedida
Se as coordenadas do mundo forem iguais às coordenadas da tela, não há necessidade de conversão, mas como não há provas disso, tomei precauções no código por segurança.
O código a seguir funcionou.
Vector2 localPoint;
RectTransformUtility.ScreenPointToLocalPointInRectangle(trans.GetComponent<RectTransform>(), Input.mousePosition, null, out localPoint);
Vector3 v = tf.TransformPoint(new Vector3(localPoint.x, localPoint.y, 0));Aqui, o `tf` usado na segunda linha (primeiro argumento) e o `tf` usado na terceira linha devem ser o mesmo objeto da classe Transform.
Além disso, são necessários itens que atendam às seguintes condições.
- Possui um componente RectTransform.
- É uma interface de usuário.
Por outro lado, não há problema algum se estiver inativo.
Além disso, o ponto de clique pode estar fora do GameObject alvo.
Em outras palavras, pode ser uma interface de usuário inativa de um único pixel ou uma tela (Canvas).
Resultado
O modo de renderização da tela é Espaço da Tela – Sobreposição


コメント