Behaviour Tree or Utility AI?
Both can be the right answer. What decides it is how many things your enemy has to weigh at once.
The strength of behaviour trees
A behaviour tree is readable. A designer can look at it and say "this enemy checks range first, then attacks". It is also easy to debug; you can see which node it is stuck on.
It is ideal for sequential and conditional behaviour: open the door, step inside, look around, raise the alarm. In scenarios like that the tree naturally takes the right shape.
Where Utility AI wins
If the enemy has to weigh ten things at once — how much health, do I have ammo, is an ally nearby, is the player strong — the tree becomes unreadable fast.
Utility AI asks each action to produce a score for the current state and picks the highest. Adding a new behaviour means writing a scoring function rather than restructuring a tree.
Both, in practice
On recent projects Utility AI makes the high-level decision ("attack now", "retreat now", "take cover now") while a small behaviour tree executes how that decision plays out.
This split takes the strong side of both approaches: decisions stay flexible, execution stays readable.
The forgotten third piece
Whichever architecture you pick, believability is decided by the perception system. When does the enemy see you, when does it hear you, when does it forget you?
An AI with perfect information feels unfair regardless of the tree structure behind it. Most of my time goes into perception, not behaviour.