Na programação existem algumas boas práticas que são quase que obrigatórias estuda – las.
Mas, não é no sentido de que você não vai poder programar sem elas e sim que são extremamente importantes.
Principalmente para organizar seus códigos e deixar seus jogos e aplicações muito mais fácil de se modificar.
O que é Herança?

Quando criamos jogos, praticamente todos os objetos terão suas próprias características e ações.
E nesse ponto podemos ter aldeões, mercenários, dragões, magos, etc, e cada um terá uma ação correspondente.
Mas mesmo eles têm suas particularidades, todos podem compartilhar de propriedades em comum.
E que servirão para o mesmo propósito, como quantidade de vida, ataques, dano, entre outras.

E então, entra em ação a Herança, pois, você pode criar uma classe especificamente para controlar essas propriedades.
E assim fazer os scripts existentes em outros objetos herdarem essas propriedades, quando for conveniente.
Pois, é muito mais fácil este método, por dispensar a necessidade de criar o mesmo sistema para cada GameObject.
Herança e sua importância

Assim como encapsulamento e o polimorfismo, dá pra se dizer que a Herança é um dos pilares da programação.
E como tal, ela é de extrema importância para o funcionamento e a saúde do seu projeto como um todo.
Pois, ela reduz consideravelmente a quantidade de códigos necessários e scripts, que fariam a mesma função.
E também torna a manutenção do seu código muito mais fácil, já que você saberá exatamente onde refatorar.
E principalmente facilita a implementação de novas funções ou melhorias em outras já existente, e muito mais.
Mas, o controle que ela traz em seus projetos, é de extremo valor para qualquer programador.
Como funciona a Herança

Um excelente exemplo seria um jogo onde você precise implementar um sistema de locação.
E então teríamos carros, motos, aviões, etc, e você criasse uma função de alugar, para cada um dos mencionados.
E quanto mais veículos diferentes mais funções você criaria, o que tornaria seu código gigantesco.

Mas, usando a Herança você cria uma classe com todas as propriedades como, preços, combustível gasto, etc.
E criaria também apenas uma função para fazer toda a lógica, passando no parâmetro o veículo em questão.
Pois, assim você consegue fazer os veículos herdarem as propriedades que serão necessárias na função única de locação.

E assim você, dispensa facilmente, dezenas de funções que fariam a mesma coisa e centralizaria em uma única classe pai.
E com isso novas mecânicas de locação a serem implementadas, seriam feitas nessa classe e funcionaria para todos os veículos.
Ou seja, você não teria que programar isso em cada veiculo, e nem muito menos em novos que vierem a ser adicionados.
Herança, como usar!

Por padrão os scripts criados na Unity herdam do Monobehaviour, que permite usar as funções da Engine.
E são o Start, Update, acessar e manipular a física da Engine e até as collision, etc.
Então primeiro você cria a classe pai, com os métodos e propriedades, e deixa herdando do Monobehaviour.

Mas, nos scripts que você quer que herde dessa classe, você substitui o Monobehaviour pelo nome da classe pai.
E com isso você tem acesso às propriedades e também funções que estejam publicas na classe pai.
Exatamente como nas imagens de exemplo onde os inimigos estão herdando da classe pai Enemy.

Porém, caso seja necessário reescrever um método público da classe pai, você precisa adicionar a palavra “Virtual”.
E reescrever a função no script desejado utilizando o “Override”, assim como no exemplo.
E com isso, você tem a possibilidade de personalizar uma determinada função para um script especifico.
Em resumo, entender e utilizar o conceito de Herança sempre que possível, ajuda demais na boa estruturação do seu código.
Logo abaixo separamos o primeiro vídeo de uma playlist de programação muito top!
Seja o primeiro a comentar.