In this picture there is not enough information to say it's bad code with regard to the larger picture. There is enough information to say it is reasonably logical, readable, and editable. I am willing to admit I am not a seasoned unity3d user yet. But I don't see any painfully-in-need areas of optimization. This shit is so simple I don't quite get why the only suggested alternative, polymorphism, is even needed.
It's been a while since I needed it. But it's a way to access methods of many different classes all of which inherit from a base class. The methods accessed if only implemented in the base class, means the base class method gets called else the implementation of the class inheriting the base class has its same-named methods called.
I do recall a google-talk or something like it where polymorphism as a way to reduce ifs and switch-case statements worked quite well. There may have even been some "you're not very seasoned if you don't know about this yet" shittalking. Likely context was " X things we find people aren't optimizing or are forgetting can be optimized."
But really i don't see any meaningful benefit to polymorphism in the context of that image. If you really believe the solution is ALWAYS to take everything and make it pushed away and tucked into nice methods you call: you're just weak and are slowing down prototyping.
It is an attractive idea to take a handful of variables like Sex, Teacher, Retired, Ill and directly without any needs for if-statements, just lookup the appropriate function and execute it. Cuts down on ifs big time.
But the problem with that is you don't get to see in the function auto-jumped to: the other functions that implement things how they do! When prototyping it's easier to debug (if you're a seasoned programmer) when all the many cases are laid out in branching if-logic in the same space.
For the non-programmers it works like this. Imagine you wrote an essay where each paragraph you know is getting its support from the others. It's meant to all be understood by the relative understanding given by each one basically in a linear sequence. Now your English teacher divides your essay up and randomly shuffles it so it's broken into many pieces. The teacher now has the luxury of picking out the exact segment to challenge you on. This segment *MAY* be THE real problem. But you and them don't really know until you referred back to the others. Now you have to track down all the relevant segments trying to see why things were said in the one.
In the debugging world your program can fault at any place. This is why it's like the segments being randomly shuffled, and also you don't know if something that went on earlier was the problem until you start going through things. If you had a IRL FANTASTIC MEMORY SIZE and RECALL ability as person, and worked your text editor like a true hardcore pro, then the more optimal method of splitting things up and elegantly auto-calling the right function is better.