segunda-feira, 28 de dezembro de 2015

Como fazer uma arma atirar

Para começar crie os seguintes GameObjects:

  • Cubo. Dê a ele uma forma aproximada de uma arma usando a escala e dê o nome de "Arma".
  • Empty GameObject. Dê a ele o nome "Saida da bala", logo depois posicione ele no lugar onde a bala irá sair da arma e na Hierarchy view clique e o arraste para cima da arma, assim onde a arma for ele vai.
  • Sphere. Dê o nome de "Bala" e com a escala, deixe ela do tamanho que encaixe dentro da arma, isso é pra não ficar uma bala maior que a arma, ficaria esquisito.
Continuando crie os seguintes scripts:

  • ArmaScript. Esse vai ser o script da arma então atribua este script a ela.
  • BalaScript. Esse vai ser o script da bala então atribua este script a ela.
Editando os scripts:

ArmaScript:
Crie uma variavel publica do tipo GameObject chamada de "saidaDaBala". Salve tudo e volte para unity, na Hierarchy view clique na arma e observe que no componente script vai aparecer a variável que criamos e um campo no lado dela, clique e arraste a Saida da bala para cima desse campo. Voltando ao script da arma no método update, crie variavel do tipo GameObject chamada de "bala" e vamos atribuir uma instância a essa variável por meio da função Instantiate que precisa de três argumentos: um GameObject, uma posição e uma rotação, depois disso colocamos antes do ponto vígula "as GameObject" para dizer que será como GameObject. O GameObject que vamos pegar será fora da cena, diretamente de nossos assets mas primeiro, crie uma pasta chamada "Resources" logo depois no script o primeiro argumento da função Instantiate será isso "Resources.Load("Bala")", segundo argumento será a posição da saída da bala então será "saidaDaBala.transform.position" e por último não menos importante a rotação que será a mesma da saída "saidaDaBala.transform.rotation". Bala instanciada vamos dar uma velocidade para ela usando a função GetComponent para acessar a velocidade no script da bala e atribuir uma velocidade.

BalaScript:
Crie uma variavel publica do tipo int chamada de "velocidade". No método update vamos atribuir um movimento para bala, como a bala vai apenas para frente de acordo com a rotação da arma e na unity um objeto vai para frente quando está acrescentando em z então usando a função Translate da classe Transform que depende de três argumentos: x,y e z para movimentar um GameObject. X vai ser 0 porque não quero que ela vá nem para esquerda e nem para direita, Y vai ser 0 porque não quero que ela vá nem para cima e nem para baixo e Z vai ser igual velocidade de valor positivo pois a bala vai para frente, multiplicado pelo deltaTime da classe Time que é a variação do intervalo de tempo desde o último updade do frame. Depois de tudo, na Hierarchy view clique na bala e arraste para a pasta Resources, novamente na Hierarchy view clique na bala e na aba Inspector view clique na opção Apply e apague da Hierarchy view a Bala.

Vídeo tutorial

Acessar variáveis em outros scripts

Para acessar uma variável que está em um script pertencente ao mesmo ou outro GameObject é bem simples. Pra melhor entendimento crie os seguintes GameObjects vazios:

  • Pessoa 1
  • Pessoa 2
  • Pessoa 3
Crie scripts para os três GameObjects com o nome Atributos+(Nome do GameObject). Ex: AtributosPessoa1. Dica: Quando estiver criando seus scripts, ao nomear-los use letras maiusculas para diferenciar as palavras no nome do script e começe o nome do script com letra maiuscula para diferenciar dos nomes de variáveis que por boas práticas são iniciadas com letras minusculas.

Scripts criados, vamos editalos, use o monodevelop ele é mais leve, senão use outro de sua preferência. Você deve criar(fora de qualquer método) variáveis publicas do tipo GameObject que represente os GameObjects que você quer acessar o script. Salve seus scripts e atribua os scripts a cada um dos GameObjects e dê uma olhada na aba Inspector de cada GameObject e repare que no componente script de cada um deles vai estar o nome das variaveis que você criou e do lado um campo que pede um algo do tipo.
Então nesse ponto clique e arraste o GameObject para cima do campo pertencente a cada um. Voltando aos scripts, agora podemos acessar as variaveis dos scripts com a função GetComponent da classe GameObject.

Download do projeto
Vídeo tutorial