Grama alta Unity2D

8

Estou usando o Unity para criar um jogo 2D de cima para baixo. Tudo tem sido ótimo até agora, mas me deparei com um problema que não consigo resolver adequadamente.

Eu quero implementar "áreas de grama alta" onde parte do personagem será ocluída.

Um exemplo visual:

Pensei em criar grama alta por camadas, mas isso criaria muitos objetos de jogo, e a transição à medida que o personagem se move não será suave o suficiente.

Alguma idéia de como eu poderia abordar isso? Eu pensei que talvez usando shaders eu pudesse conseguir algo assim, mas meu conhecimento sobre shaders é muito muito limitado, então nem sei se isso é possível.

Leo
fonte
6
Às vezes você precisa trabalhar com muitos objetos do jogo, você sabe.
Uma espécie de truque para evitar mais objetos do jogo seria substituir o sprite do jogador por uma versão "isInGrass" personalizada do sprite (exemplo muito grosseiro aqui ) enquanto estiver na grama e desenhá-lo no topo. Com alguma arte legal e um pouco de transparência na parte inferior (para ajudá-la a se misturar com a grama), pode parecer bom o suficiente.
Christian
Pensei nessa abordagem, mas, além de todo o trabalho necessário (precisaríamos duas vezes mais de animações para cada ator), a transição de fora da grama para dentro do cenário lateral (na imagem de exemplo: Linha superior , terceira coluna), quando metade do corpo estiver dentro e a outra metade fora, o resultado seria bem confuso.
Leo
2
Soa como uma máscara ou estêncil é o que você precisa. Este tópico contém algumas informações úteis. Esta extensão demonstra o que estou falando, embora não saiba se fará exatamente o que você precisa.
11
Isso parece muito com o que eu estava procurando! Vou ter que fazer alguma pesquisa e experimentar. Se eu conseguir algo funcionando, eu o postarei como resposta.
Leo

Respostas:

1

Eu concordo com @Christian (embora eu não chamaria isso de hack). Detecte a condição quando o objeto parecerá diferente e depois desenhe-o diferente. Tudo no jogo não precisa ser um "modelo" de como ele funciona na "natureza". Esse é um erro que cometi muitas vezes e, portanto, tornou-se uma espécie de mantra para mim. Pergunte a si mesmo: o que você ganharia se o mato obstruísse o jogador "realisticamente" em vez de apenas desenhar o jogador da maneira que deveria ser? Coloquei isso entre aspas, porque, ao tentar imaginar como isso seria, acho que a abordagem de oclusão em camadas pode parecer realmente inferior.

Se sua preocupação com a abordagem de @ Christian é gerenciar a lista "potencialmente ilimitada" de pequenas coisas que você precisa verificar em cada quadro, esse é outro erro que cometi muitas vezes. Eu recomendo que você "apenas siga em frente" por enquanto e verifique periodicamente quanto tempo a lista realmente chegou - e se ela realmente se tornou um problema . Uma de duas coisas acontecerá. Ou não se tornou um problema; nesse caso - por que você está tentando resolvê-lo? Ou ele tem e você precisa criar uma solução (mínima) para resolvê-lo. Não tente resolvê- lo simulando -o.

Allen
fonte
0

Finalmente encontrei uma solução satisfatória! O comentário do @Thebluefish me indicou a direção certa com máscaras.

A idéia é usar um sombreador que desenhe o personagem em duas passagens:

  • No primeiro passe, o personagem é renderizado normalmente, mas estando completamente atrás dos arbustos.
  • No segundo passe, eu o desenho novamente, usando uma máscara que olny desenha a parte superior do personagem, em cima dos arbustos.

Isso é feito mesmo quando o chatacter não está dentro dos arbustos. Dessa forma, não preciso detectar colisões contra os arbustos e também facilita a transição dentro do mato em casos limitados como este:

A metade do personagem que está fora do mato é renderizada na primeira passagem. A outra metade será completamente ocluída pelo mato.

Na segunda passagem, o caractere mascarado será renderizado novamente. A parte externa do arbusto permanecerá a mesma, mas a parte interna do arbusto será renderizada por cima com a máscara em cima do arbusto, fazendo com que pareça estar dentro do arbusto.

Leo
fonte
-1

Você pode detectar se o personagem está ou não na grama. Em seguida, desenhe apenas a metade superior do personagem.

JojololomenPL
fonte
Eu acredito que esta resposta já foi sugerida. Você tem detalhes adicionais para adicionar à sua resposta?
MichaelHouse