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.
Respostas:
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.
fonte
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:
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.
fonte
Você pode detectar se o personagem está ou não na grama. Em seguida, desenhe apenas a metade superior do personagem.
fonte