Na primeira aula eu expliquei que métodos representam ações que um objeto faz, e que são definidos na classe dos objetos. Um exemplo que vimos foi o Start() e o Update(), gerados pelo próprio Unity. Ambos os métodos rodam automaticamente pelo próprio Unity, e só funcionam por conta da herança da MonoBehaviour.
Se você já estudou funções, os métodos funcionam da mesma forma, com a diferença que são executados a partir de objetos.
Os métodos, por descreverem ações, são nada mais que blocos de códigos que rodam comandos programados, e podem ser chamados inúmeras vezes. Eles podem também receber informações ou retornar informações.
Um exemplo clássico é criar uma classe Calculadora, e escrever os métodos que calculam as operações básicas.
Antes de escrevermos essa classe, primeiro precisamos entender o formato geral de um método:
O nível de proteção comentamos na aula anterior.
O tipo de retorno indica o tipo do dado que o método retorna. Os tipos são os mesmos das variáveis/atributos (int, float, Vector2, Rigidbody, etc.). Além disso, ele pode não retornar valor algum, nesse caso existe o tipo void.
O nome do método segue a mesma regra do nome das variáveis.
Os parâmetros são os dados que um método pode receber e irá usar para executar suas ações internas.
Indo então para o exemplo da Calculadora, pensemos primeiramente na operação mais fácil - Soma. Sempre que vamos somar números, pegamos o primeiro número e adicionamos ao segundo, ou seja, a ação "somar" precisa de dois dados para acontecer. O resultado da soma, ou seja, a informação que a soma retorna, é a adição do primeiro número no segundo.
Colocando isso em código:
No código acima, escolhi o modificador public.
O tipo de retorno deve condizer com a operação feita, ou seja, podemos somar dois números quaisquer, com ou sem vírgula, portanto o retorno (o resultado da operação) é um valor float.
Sum é o nome da operação, portanto coloquei como nome do método.
E os parâmetros são os dois números necessários para que a operação ocorra (não existe adição de um número só).
Por fim, a instrução return serve justamente para que o método se encerre, retornando o resultado de sua ação, no caso o resultado da adição.
Isso tudo vale para as outras três operações. Use o exemplo da Soma para implementa-las.
Para usar os métodos, podemos chama-los dentro do Update() ou do Start(). Como não é necessário repetir esse processo todo frame, colocarei os exemplos dentro do Start(). Aliás, veja que o próprio Start() é um exemplo de método que não retorna informação alguma (void).
No código a seguir eu apenas chamei o Sum dentro do print() para que o resultado da conta seja exibido no Console.
Veja que para executar o Sum, eu apenas escrevi o nome dele, seguido dos parênteses, separando os parâmetros por vírgula.
No primeiro exemplo, os parâmetros são os números 10 e 5.87; no segundo exemplo eu coloquei os valores em duas variáveis, e passei essas variáveis como parâmetro para o método - não há diferença efetiva nesse caso, pois as variáveis representam os valores.
A partir da Soma, gostaria, também, de exemplificar com um método que verifica se um número é positivo ou negativo. Nesse caso, o método precisa avaliar um número apenas, ou seja, o método precisará de apenas um parâmetro. E seu retorno pode ser ou verdadeiro ou falso, logo, ele retornará um valor booleano. Novamente, o return encerra imediatamente a execução do método, retornando o valor indicado. Assim temos o seguinte método:
E se quiséssemos chamar um método presente em outro objeto? Nesse caso usaríamos a referencia para esse objeto e executaríamos o método a partir dela.
Um caso que poderemos ver a frente é quando implementarmos o movimento de um personagem usando o Rigidbody. Precisaremos de uma referência para ele, e depois chamaremos o método de movimento. Veja: