Cinemachine para 2D: Dicas e truques

Você está trabalhando em um sistema de câmera para o seu jogo 2D há muito tempo e gostaria que houvesse algo como o Cinemachine para 2D? Poucas pessoas sabem disso, mas já existe! Esta postagem do blog fornece algumas dicas para você aproveitar ao máximo o Cinemachine e como essa ferramenta pode beneficiar e acelerar significativamente o desenvolvimento do seu jogo 2D. Continue lendo para saber mais sobre as câmeras virtuais Cinemachine, Confinadores e muito mais, especificamente para uso em jogos 2D.
Você pode obter o Cinemachine em nosso Package Manager no Unity se estiver usando uma versão superior à 2018.1.0b7.
Isso pode ser feito em Window > Package Manager > All e, em seguida, selecionando Cinemachine.

Com o Cinemachine, é relativamente fácil começar a criar seu sistema de câmera para um ambiente 2D. Vamos dar uma olhada na criação de uma câmera virtual para 2D.
1. Crie uma câmera virtual 2D indo até a barra de menus e selecionando Cinemachine > Create 2D Camera. Isso criará uma câmera virtual configurada para um ambiente 2D. Se for a sua primeira câmera virtual na cena, ela também adicionará um componente Cinemachine Brain à sua câmera principal.

2. Arraste seu jogador da hierarquia para o alvo Seguir.
3. Certifique-se de que não haja nada no LookAt Target; se houver algo lá, selecione-o e pressione backspace ou delete para remover a referência.
4. Ajuste as configurações de Orthographic Size e Body para atender às suas necessidades.
O principal aspecto que você notará entre uma câmera virtual 2D e uma câmera virtual 3D é o fato de estarmos usando um transpositor de enquadramento. Esse transpositor especial seguirá um alvo no plano X-Y da câmera e impedirá a rotação da câmera. Para que o transpositor de enquadramento funcione corretamente, precisamos garantir que o "LookAt target" das câmeras virtuais seja nulo. Outro aspecto a ser observado é que os jogos 2D usam uma visualização ortográfica. Ao criar sua câmera virtual pela primeira vez, você precisará alterar a projeção para ortográfica na câmera do cérebro da Cinemachine da sua cena.

Um aspecto importante a ser lembrado é que, com a Cinemachine, você não deve tentar fazer com que uma câmera faça tudo. Em vez disso, você pode ter diferentes "câmeras virtuais" ao redor da cena e mesclar entre elas usando o Cinemachine Brain. Essa mescla pode ocorrer se o jogador estiver com a saúde baixa, se o jogador tiver entrado em uma determinada área ou em qualquer outro cenário que você possa imaginar que exija uma mudança no enquadramento da câmera ou no pós-processamento. Você pode ajustar as configurações de mistura no Cinemachine Brain, dependendo de como deseja que os visuais sejam.
Assista ao vídeo abaixo para ver como ajustar a câmera virtual durante o modo de jogo.
Outra coisa legal que podemos fazer com o Cinemachine é usar uma caixa de limite para confinar a câmera virtual a uma determinada área. Esse recurso está disponível na seção de extensão da Câmera Virtual. Abaixo estão as etapas para criar esse efeito.
1. Configure uma caixa de limite para o nosso nível. Isso será usado para limitar o nível. Isso é feito por:
- Crie um "GameObject" vazio.
- Adicione um "CompositeCollider2D" ao GameObject.
- Defina o tipo de geometria do 'CompositeCollider2D' como Polygons.
- Defina o "Rigidbody" no GameObject como Static.
- Adicione um "BoxCollider2D" ao GameObject.
- Ajuste o "BoxCollider2D" para se adequar ao seu nível.
- Defina o "BoxCollider2D" como "Used by Composite".

2. Adicione a extensão do Confiner à sua câmera virtual.
3. Arraste a caixa de limite que criamos anteriormente para a Bounding Shape 2D Box.
4. Decida se deseja que a câmera fique confinada às bordas da tela, o que pode ser ajustado com a caixa de seleção "Confine Screen Edges" (Confinar bordas da tela).
5. Por fim, podemos decidir se queremos que o Confinador tenha amortecimento. Isso permitirá que a câmera se sobreponha suavemente à borda do colisor de confinamento. Se você não quiser esse efeito, defina o Tempo de amortecimento como 0.
Veja os resultados disso abaixo:
Exemplo de vídeo:
Outro recurso interessante do Cinemachine que podemos usar em 2D é a Group Camera. Essa câmera nos permite criar um grupo-alvo para a nossa câmera observar. Uma Group Camera é útil se você estiver fazendo uma cena em que deseja mostrar algo importante, se quiser manter mais de um objeto em cada quadro ou se quiser criar um jogo multijogador local em 2D.
No Cinemachine, podemos fazer isso da seguinte maneira:
1. Criar uma nova câmera virtual 2D
2. Criar um novo GameObject na cena

3. Adicionar componente > Cinemachine > "Cinemachine Target Group
4. Adicione os GameObjects nos quais você deseja se concentrar ao Target Group
5. Arraste o grupo-alvo para a propriedade "Follow Target" (Seguir alvo) das câmeras virtuais no Inspetor.
6. Ajuste o Orthographic Size mínimo e máximo - que, em termos de câmera, define o "zoom" da câmera - para a sua configuração preferida
7. Determine o tipo de enquadramento de grupo que você deseja. 'Horizontal' considera apenas a dimensão horizontal do quadro ao enquadrar a câmera. 'Vertical' considera apenas a dimensão vertical da moldura ao enquadrar. O tipo "Horizontal e Vertical" leva em conta as duas dimensões.
Um "Grupo de alvos" é um componente do Cinemachine que permite visualizar vários alvos na mesma câmera virtual. Ele ajusta o tamanho da câmera para garantir que os alvos fiquem visíveis, dependendo do peso. Por exemplo, se todos os alvos tiverem um peso de 1, o grupo-alvo garantirá que todos os alvos estejam visíveis.
Aqui está um exemplo de uma câmera de grupo que focaliza o jogador e um baú.

Com o Cinemachine V2.2, adicionamos uma nova extensão Impulse. Essa extensão permite que os usuários criem efeitos de vibração da câmera sem criar nenhum código. O Impulse Extension pode ser adicionado como uma extensão à sua câmera virtual. Vou orientá-lo sobre como adicionar isso à sua cena:
- Crie uma câmera virtual 2D usando a opção de menu Cinemachine e configure-a para seguir nosso alvo.
- Clique em Add Extension > Cinemachine Impulse Listener.
- No Impulse Listener, verifique se a caixa de seleção denominada "Use 2D Distance" está marcada.
- A máscara de canal permite que você filtre os impulsos que deseja ouvir. Neste exemplo, usaremos o canal padrão.
- Selecione o GameObject do qual enviar o Impulse; neste exemplo, usaremos uma bola que quica. Sempre que atingir o piso, ele transmitirá um sinal de impulso no canal padrão e nosso Impulse Listener o captará.
- Clique em Add Component e procure "Cinemachine Collision Impulse Source".
- No cabeçalho "Signal Shape" (Forma do sinal), selecionaremos um sinal para a variável Raw Signal (Sinal bruto). Esse é um perfil "NoiseSettings". Podemos usar as predefinidas ou criar as nossas próprias.
- Crie um novo perfil "NoiseSettings" clicando no ícone de engrenagem e selecione "New Noise Setting" (Nova configuração de ruído). Salve isso em seu projeto.
- Podemos optar por fazer com que o ruído afete a Posição e a Rotação ou apenas uma delas. Como se trata de um jogo 2D, afetaremos as posições X e Y e a rotação Z. Um bom perfil de ruído é imprevisível. Com o ruído, a única coisa que queremos fazer é replicar parte da aleatoriedade da natureza. Podemos fazer isso com várias camadas com detalhes diferentes.
- Se quiséssemos, poderíamos adicionar um ganho à frequência e à amplitude que o perfil de ruído aplica.
- No cabeçalho Spatial Range (Faixa espacial), ajustaremos a Dissipation Distance (Distância de dissipação). Isso determina a que distância não sentimos mais o impulso. Defina-o como 25 por enquanto.
Se quiséssemos, poderíamos ajustar o Modo de Dissipação para alterar o tipo de decaimento. Há outras configurações que podem ser ajustadas, mas, por enquanto, isso é tudo o que precisamos.
Você pode ver o resultado abaixo:

Portanto, para resumir, agora sabemos como fazer:
- Obtenha o Cinemachine com o Package Manager
- Criar uma câmera virtual 2D
- Confinar uma câmera virtual em um espaço 2D
- Componha uma câmera virtual para seguir vários alvos
- Configure um Impulse Module para adicionar a vibração da câmera
Espero que tenha gostado desta postagem do blog e que agora se sinta pronto para usar o Cinemachine em seu próximo projeto 2D! Se você quiser se manter atualizado sobre o Cinemachine? Participe da discussão em nosso fórum.
