Coloque uma imagem da interface do usuário entre dois sprites 2D no Unity

8

Estou desenvolvendo um jogo 2D com o Unity.

Eu tenho dois objetos sprite renderizados usando SpriteRenderer.

Com o novo sistema de interface do usuário, quero usá-lo para exibir uma imagem entre meus dois sprites. Ou seja, meu primeiro sprite tem uma ordem de classificação de 100, então minha imagem da interface do usuário tem uma ordem de classificação de 200 e, em seguida, meu segundo sprite tem uma ordem de classificação de 300.

Isso é possível?

Tentei usar camadas de classificação, mas não importa o quê, a imagem da interface do usuário parece sempre sobrepor meus dois sprites.

Óxido
fonte

Respostas:

2

Isso é bastante simples de fazer, o Weexe estava no caminho correto, mas não forneceu toda a informação que você precisa.

Primeiro, crie seus 2 sprites e um Canvas segurando a imagem desejada. Defina "Order in Layer" para 2 e 0 para os 2 Sprites que você deseja em segundo plano ou primeiro plano. Um número maior significa que está na frente. Todos os elementos, incluindo a interface do usuário, deverão estar na mesma camada de classificação.

Agora, clique na tela e defina o Modo de renderização como Espaço do mundo . Isso é necessário para que você tenha a opção de alternar entre sprites no mundo. Porque agora você tem a opção Classificação da Camada e Ordem na Camada no seu Canvas. Defina a ordem na camada como 1 e a camada de classificação como igual aos 2 sprites !

Nota: Se você não conseguir encontrar a Imagem da interface do usuário, observe que ela é realmente muito grande na cena, será necessário reduzi-la bastante em tamanho e posicioná-la na imagem (não na tela). Se você quiser encontrá-lo, diminua muito o zoom e começará a vê-lo ( Dica: se for realmente uma imagem pequena, você deverá ativar a ferramenta de transformação para saber onde está posicionada no momento).

Acabei de recriar isso em um minuto com imagens de exemplo, definitivamente funciona. Se você tiver outras dúvidas, basta comentar. Terei prazer em ajudar.

CrystaX
fonte
1

Você deve usar a referência "Espaço do mundo" do modo Render: http://docs.unity3d.com/Manual/UICanvas.html

Weexe
fonte
Com o modo de renderização "World Space", a imagem simplesmente desaparece. Não consigo vê-lo na visualização do jogo.
Oxide
Sua explicação foi bastante incompleta. Depois que o modo de renderização estiver definido como "World Space", você deverá posicionar a imagem em sua cena. Você fez isso?
Jhocking 20/04
11
Esta resposta deve ser melhorada com informações adicionais. Por que esse modo de renderização deve ser usado? Que problema está resolvendo? Existem outras etapas?
MichaelHouse
1

Estou lutando com isso há uma hora e finalmente cheguei a uma solução.

Eu estava trabalhando com uma interface do usuário do World Canvas e não conseguia fazê-la funcionar corretamente com sprites: primeiro, os sprites estavam sempre no topo, depois os sprites desapareciam completamente, mesmo que a imagem da interface do usuário acima deles não fosse totalmente opaca.

Portanto, com base em: http://answers.unity3d.com/questions/832834/unity-2d-46b-ui-why-are-instantiated-prefab-sprite.html

Você deve definir "Order in layer" do "Sprite Renderer" do sprite de fundo como 0.
Em seguida, defina "Order in layer" do componente UI Canvas como 1.
O sprite de primeiro plano "Order in layer" deve ser definido como 2 .
A camada de triagem foi padrão para os 3 elementos.

Basicamente, você pode trabalhar com mais de uma tela de espaço no mundo e mais de um sprite (caso deseje muitas camadas de itens 2D) e definir as camadas de classificação corretamente (lembre-se de que não é possível definir a ordem na camada do elemento UI individualmente. é definido pela ordem do GameObject na hierarquia. Em vez disso, você deve definir a ordem na camada para a interface do usuário na tela)

Ajudante de Papai Noel
fonte