Ojo a la hora de hacer "copias" del objetivo, porque esto NO es una copia:
GameObject targetCopy = target;
Sería interesante que cualquier comportamiento de dirección en lugar de usar directamente objetivo.transform.position, usase una función o algo parecido para conseguir la posición del objetivo; de esta forma los distintos comportamientos lo que tendrían que hacer sería cambiar lo que hace esa función. Esto implica cambiar ComportamientoAgente para que ofrezca esa función y que las subclases la puedan sobreescribir.
Ojo a la hora de hacer "copias" del objetivo, porque esto NO es una copia:
GameObject targetCopy = target;
Sería interesante que cualquier comportamiento de dirección en lugar de usar directamente objetivo.transform.position, usase una función o algo parecido para conseguir la posición del objetivo; de esta forma los distintos comportamientos lo que tendrían que hacer sería cambiar lo que hace esa función. Esto implica cambiar ComportamientoAgente para que ofrezca esa función y que las subclases la puedan sobreescribir.