Most adventure games rely heavily on the narrative, so dialog is a must!
I created a Scriptable Object to use for each line of dialog. Every dialog object contains the character portraits, names, and the dialog line, as well as the dialog line or set of choices which follows. Additionally, they hold parameters for whether the line is 'spoken' by the left or right character.
The dialog choices are also Scriptable Objects, which hold the choices as well as the corresponding dialog line to be used in response.
The UI is simply a panel on an overlay canvas. The interaction script on a NPC calls a function on the dialog UI manager, which takes a Dialog Object as an argument, that updates the corresponding UI elements using the parameters of the Dialog Object.
I really wanted the dialog text to appear one letter at a time, as if it were being typed - from my younger days with JRPGs, it just seems natural. Did I spend time on that feature, all the while, knowing most people will just press the button to complete the line without waiting? Yes, yes I did.