Estudar a fundo a linguagem de programação da sua game Engine, faz total diferença em seus jogos.
Pois, quanto mais conhecimento e domínio você tiver sobre a linguagem, mais opções terá para criar suas mecânicas.
E os Delegates no C# é um bom exemplo, de como uma função pode facilitar na hora de codar os teus códigos.
O que é um Delegate?
Na programação é muito comum o uso de variáveis para armazenar diferentes tipos de valores.
E que vão desde valores como números, boleanas, letras, listas, imagens, em resumo, tudo que precisaremos manipular posteriormente.
E também temos os métodos e funções, que são blocos de códigos e comandos, que executarão determinada ação.
Por exemplo, uma função Attack, agrupa diversas linhas de código responsáveis por executar o ataque.
E é comum, termos funções que controlam diversas ações, como andar, correr, pular, pausar o game, etc.
E o Delegate basicamente é uma forma de armazenar uma ou mais funções em uma única variável.
E assim facilitando para nós a chamada de uma ou mais funções, com uma linha de código apenas.
Quais as vantagens no uso de Delegates?
Devida a praticidade que o Delegate nos oferece, de armazenar uma ou mais funções, seu uso é indispensável.
Por exemplo, em uma simples mecânica de atacar, é necessário executar diversos códigos e funções.
Pois, temos que travar a movimentação, executar a animação, ataque, e até mais funções a depender da complexidade da mecânica.
E um usando um Delegate, você poderia armazenar todas essas funções e chama-las em uma única linha de código.
Mas, outro excelente uso, seria poder passar um Delegate como parâmetro para uma determinada função.
Pois, funções só podem receber variáveis como parâmetro, e assim você envia uma variável contendo diversos métodos dentro dela.
E esse uso pode ser facilmente notado ao utilizarmos o novo sistema de Inputs da Unity.
E sem contar que Delegates funcionam muito bem quando combinados com o uso de Events em seus códigos.
Como usar um Delegate?
Primeiramente você precisa declarar como public ou private, mas public é mais interessante para podermos, acessa-lo de outros lugares.
E em seguida você digita Delegate e logo após, escolhe um tipo de retorno, podendo ser void, float, int,etc.
Mas, vale é importante saber que os métodos que você pretende armazenar, precisam retornar o mesmo tipo.
E então você dá um nome para o seu Delegate, e adiciona parâmetros ou não na declaração dele.
E logo abaixo você precisa criar uma variável do tipo do seu Delegate, podendo transforma-la em Singleton ou não.
E no Start ou Awake, você pode armazenar um método na variável do Delegate usando o sinal de =.
Porém, assim ele será um Delegate Single Cast, ou seja, tem apenas um método armazenado na variável.
Mult Cast:
Mas, para que ele seja Multi Cast, você precisará utilizar o += antes do método a ser armazenado.
E dessa forma ele acrescenta mais um método na variável, que guardará quantos métodos você precisar.
E também você pode retirar métodos de um Delegate usando o sinal -= antes do método a ser retirado.
Mas, uma boa prática aqui seria usar a função OnEnabled para você adicionar novos métodos ao Delegate.
E usar a função OnDisable, para retirar essas funções do Delegate, assim você estará ajudando no processamento.
Pois, retirando as assinaturas dos métodos você deixa a variável limpa e livre para uso, economizando processamento.
O uso de Delegates pode ajudar demais a centralizar funções que precisam de outras para funcionarem.
E dessa forma além de deixar o código com menos linhas, você ainda tem mais controle sobre os métodos.
Seja o primeiro a comentar.