Meu Primeiro Jogo em Unity (Parte 2, novos progressos)
Olá, pessoal, essa é a parte 2 das postagens a respeito do desenvolvimento do meu primeiro jogo em Unity, chamado Ataque Pirata(acesse a parte 1 aqui).
Neste post, venho trazendo os novos progressos que realizei neste projeto desde a última postagem, assim como a solução que encontrei para o problema da inclinação do canhão que citei na parte 1, no tópico "Próximos Passos".
Neste post, venho trazendo os novos progressos que realizei neste projeto desde a última postagem, assim como a solução que encontrei para o problema da inclinação do canhão que citei na parte 1, no tópico "Próximos Passos".
Embora eu não tenha trabalhado no projeto tanto quanto gostaria, realizei progressos importantes neste período de quase duas semanas, e, inclusive, já estou utilizando um Asset de canhão no lugar do bloco branco que o representava.
MODELO DE CANHÃO 3D ADICIONADO
Agora meu jogo já começa a ganhar uma cara mais bonitinha, passando uma ideia melhor do que está acontecendo! Resolvi procurar um Asset de modelo 3D de canhão. Achei alguns gratuitos(e vários outros pagos e caros!) na Asset Store da própria Unity e escolhi um que me agradou para adicionar ao meu jogo.
Embora achar este Asset de canhão tenha sido razoavelmente fácil, a substituição do bloco branco por ele me trouxe vários desafios. Um deles foi o controle da inclinação do canhão por parte do player.
Acontece que o Asset do canhão veio originalmente virado para outro lado, e rotacioná-lo para a posição correta(virado na direção dos navios) fez com que o script que muda a inclinação do canhão(LançaProjetil.cs) não funcionasse mais da maneira esperada. Quando eu rodava o jogo para testar, ao clicar no canhão e arrastar para cima e para baixo para mudar a inclinação, ele girava de lado, em vez de girar de frente. Em suma, ele girava pelo eixo errado, devido a ter sido rotacionado na montagem da cena.
Na imagem abaixo, você vê como ficava o canhão ao ser colocado na cena:
Em vez de ficar virado na direção do mar e dos navios inimigos(direita), ele veio virado para o lado de cima.
A princípio, eu quis solucionar esse problema na marra, fazendo com que o modelo do canhão já fosse inserido na cena virado para o lado certo(apontado para a direita). No entanto, não achei opção para fazer isso, e acabei aceitando que o jeito seria controlar a inclinação do canhão através de outro eixo. Antes eu estava fazendo esse controle pelo eixo Z, e depois precisei mudar tudo para o eixo X. Deu certo, mas não sem precisar de vários ajustes no código(e testes com o jogo rodando) até funcionar da forma ideal.
Veja abaixo uma comparação de como estava a cara do jogo antes e como está ficando agora(clique na imagem para ampliar):
Acontece que o Asset do canhão veio originalmente virado para outro lado, e rotacioná-lo para a posição correta(virado na direção dos navios) fez com que o script que muda a inclinação do canhão(LançaProjetil.cs) não funcionasse mais da maneira esperada. Quando eu rodava o jogo para testar, ao clicar no canhão e arrastar para cima e para baixo para mudar a inclinação, ele girava de lado, em vez de girar de frente. Em suma, ele girava pelo eixo errado, devido a ter sido rotacionado na montagem da cena.
Na imagem abaixo, você vê como ficava o canhão ao ser colocado na cena:
Figura: canhão entrava na cena virado para o lado errado.
Em vez de ficar virado na direção do mar e dos navios inimigos(direita), ele veio virado para o lado de cima.
A princípio, eu quis solucionar esse problema na marra, fazendo com que o modelo do canhão já fosse inserido na cena virado para o lado certo(apontado para a direita). No entanto, não achei opção para fazer isso, e acabei aceitando que o jeito seria controlar a inclinação do canhão através de outro eixo. Antes eu estava fazendo esse controle pelo eixo Z, e depois precisei mudar tudo para o eixo X. Deu certo, mas não sem precisar de vários ajustes no código(e testes com o jogo rodando) até funcionar da forma ideal.
MONTANDO UMA CENA LEGAL
Após o trabalho na rotação do canhão, resolvi incluir logo, apenas para fins de montagem de cena, vários Prefabs do meu mais novo, funcional e bonitinho canhão! Também incluí alguns protótipos de botões, para futuro funcionamento.Veja abaixo uma comparação de como estava a cara do jogo antes e como está ficando agora(clique na imagem para ampliar):
Cena principal antes:
Está ganhando cara, não está?
Embora eu tenha colocado cinco canhões em cena, eles não começarão em cena no início do jogo, mas, sim, apenas após o player comprá-los através dos botões debaixo.
Porém, as posições em que será possível colocar os canhões comprados serão estas da imagem.
Embora eu tenha colocado cinco canhões em cena, eles não começarão em cena no início do jogo, mas, sim, apenas após o player comprá-los através dos botões debaixo.
Porém, as posições em que será possível colocar os canhões comprados serão estas da imagem.
DEFINIDAS AS REGRAS DO JOGO
Para que o jogo possa ficar realmente interessante, é preciso que ele tenha suas regras de funcionamento bem definidas, e isto eu percebi durante o desenvolvimento nesse período entre um post e outro.
Notei que, se o player apenas ficasse atirando e destruindo os navios, isso não teria graça, não seria empolgante nem desafiador. Com isso, defini algumas regras básicas do jogo, como as seguintes:
- Os navios terão uma quantidade de "saúde", que irá diminuindo conforme os tiros de canhão acertam ele. Chegando a zero, o navio é destruído.
- Cada tipo de canhão tira uma quantia fixa de "saúde" dos navios, com valores maiores para os canhões mais potentes, logicamente.
- O player ganhará dinheiro destruindo navios.
- Quanto mais distante da base do player estiver o navio ao ser destruído, mais dinheiro o jogador ganha, já que é mais difícil acertar o navio ao longe do que quando está perto.
- Se dez navios invadirem a base do player, ele perde o jogo.
- Conforme o jogador progride no jogo, a dificuldade vai aumentando, saindo navios com mais frequência da base inimiga e em maior velocidade.
- Haverá um sistema de pontuação para o player tentar bater seu próprio recorde cada vez que jogar de novo.
Notei que, se o player apenas ficasse atirando e destruindo os navios, isso não teria graça, não seria empolgante nem desafiador. Com isso, defini algumas regras básicas do jogo, como as seguintes:
- Os navios terão uma quantidade de "saúde", que irá diminuindo conforme os tiros de canhão acertam ele. Chegando a zero, o navio é destruído.
- Cada tipo de canhão tira uma quantia fixa de "saúde" dos navios, com valores maiores para os canhões mais potentes, logicamente.
- O player ganhará dinheiro destruindo navios.
- Quanto mais distante da base do player estiver o navio ao ser destruído, mais dinheiro o jogador ganha, já que é mais difícil acertar o navio ao longe do que quando está perto.
- Se dez navios invadirem a base do player, ele perde o jogo.
- Conforme o jogador progride no jogo, a dificuldade vai aumentando, saindo navios com mais frequência da base inimiga e em maior velocidade.
- Haverá um sistema de pontuação para o player tentar bater seu próprio recorde cada vez que jogar de novo.
NOVOS CÓDIGOS DO JOGO
A ideia do SupremeGamesBR é a de atrair o engajamento de pessoas focadas na parte de programação do desenvolvimento de games, porém, diferente do que fiz na primeira parte, em que postei todos os scripts que criei, dessa vez não irei postá-los todos, mas deixo aqui sabido que, se alguém tiver interesse em conhecer os códigos que desenvolvi até então, basta pedir por comentário, que me disponho a postar os scripts posteriormente e explicar como funcionam.
Porém, irei comentar aqui a respeito da solução encontrada para o problema da inclinação do canhão, conforme prometido.
No post anterior(clique aqui para vê-lo), falei sobre como o canhão girava indefinidamente quando o jogador clicava sobre ele e arrastava o mouse para cima e para baixo, e sobre como eu queria que isso não acontecesse mais, passando a ser possível apenas incliná-lo com o movimento do mouse até certo ponto.
Pois bem, o novo script, já com a solução, ficou desse jeito:
No post anterior(clique aqui para vê-lo), falei sobre como o canhão girava indefinidamente quando o jogador clicava sobre ele e arrastava o mouse para cima e para baixo, e sobre como eu queria que isso não acontecesse mais, passando a ser possível apenas incliná-lo com o movimento do mouse até certo ponto.
Pois bem, o novo script, já com a solução, ficou desse jeito:
Explicando:
A variável "pivot" é do tipo Transform e com acesso public, sendo que, dentro do Unity, passei como parâmetro para ela um Empty GameObject que criei para servir como pivot point do canhão.
O pivot point original do modelo não estava no local ideal para incliná-lo, que é no meio da rodas. Não faz sentido um canhão com rodas girar sem ter como centro as mesmas. Assim, criei o pivot e o posicionei no centro das rodas do canhão, e coloquei o canhão como child do pivot, e passei a operar a inclinação do canhão através deste parent.
Já a variável "anguloMin" recebe um valor como parâmetro também dentro do Unity para definir o ângulo ao qual o canhão estará restrito a ser inclinado. No caso, achei bom colocar o valor 336 para esta variável, significando que o ângulo mínimo(sim, mínimo, pois acaba que o eixo X deste pivot, ao ser rotacionado negativamente, ia para cima, e positivamente, para baixo) que ele poderia alcançar seria de 336 graus(equivalendo a 24 graus, se, movendo o mouse para cima, subisse a inclinação do canhão, ao invés de descer).
Preciso esclarecer aqui um detalhe: embora, na montagem da cena, seja possível definir ângulos negativos de rotação para os GameObjects, na leitura do ângulo de rotação do objeto através do script, ele retorna somente valores de 0 a 359 graus, ou seja, se você diminuir, por exemplo, 10 graus de um ângulo 0, você terá 350 graus, e não -10.
Por fim, a condicional "if (xPivot >= 180)" foi uma forma que encontrei para descobrir se o canhão está passando do limite de inclinação para cima ou para baixo.
PRÓXIMOS PASSOS
Meu passo seguinte será o de começar a fazer funcionar o tiro do canhão contra o navio, fazendo com que o navio atingido perca "saúde".
Também quero implementar o sistema de dinheiro e cartão, como visto nos botões que criei. O player poderá usar o "cartão de crédito" imaginário do jogo(não é cartão real, não, tá?) quando não tiver mais dinheiro, e pagará a fatura, também imaginária, depois de um tempo(o jogo mostrará uma contagem de tempo em dias).
Outra coisa interessante será começar a trocar os blocos que representam os navios por Assets de modelos 3D de navios. Vou procurar algum que me agrade e colocar no jogo.
Concluindo, ainda há muito trabalho a ser feito, mas o jogo já está ganhando forma, e espero que gostem(e joguem muito!) quando ele estiver pronto!
Também quero implementar o sistema de dinheiro e cartão, como visto nos botões que criei. O player poderá usar o "cartão de crédito" imaginário do jogo(não é cartão real, não, tá?) quando não tiver mais dinheiro, e pagará a fatura, também imaginária, depois de um tempo(o jogo mostrará uma contagem de tempo em dias).
Outra coisa interessante será começar a trocar os blocos que representam os navios por Assets de modelos 3D de navios. Vou procurar algum que me agrade e colocar no jogo.
Concluindo, ainda há muito trabalho a ser feito, mas o jogo já está ganhando forma, e espero que gostem(e joguem muito!) quando ele estiver pronto!
Não deixem, também, de comentar aqui, dar seu feedback, fazer perguntas... enfim, participar, pois isso será muito apreciado!
Até a próxima, pessoal!





Comentários
Postar um comentário