What a character does while somebody else is talking. More...
| Import Statement: | import Clayground.Character3D |
Everything else in this plugin describes a character while it SPEAKS - emotion, gesture, gaze, lip-sync. The one who is not speaking has had no behaviour at all, which is what makes two characters in conversation read as two monologues taking turns rather than as a conversation.
A listener is mostly its eyes. It holds the speaker, breaks away every few seconds because a continuous stare is not attention but a threat, and marks the ends of phrases - a blink, sometimes a brow.
The phrase boundaries come from the SPEAKER'S MOUTH rather than from its script: a gap in Speech::mouthOpen while it is still speaking is the end of a phrase, whatever produced the timeline. That works for a plain envelope reading of an unknown recording exactly as it does for an aligned one, which is what makes this usable on dialogue nobody wrote down.
A nod is the signature of listening, and it needs the head to be able to do two things at once - hold an aim and dip - which is what Head::poseEuler and Head::offsetEuler are for. A nod here does not disturb where the listener is looking.
See also Character::listeningTo, GazeAnim, and Speech.
listener : var |
The character doing the listening - needs head and lookAt().
seed : int |
Same seed, same rhythm, every run - see GazeAnim for why nothing in an idle face is allowed to read a wall clock.
speaker : var |
Who is being listened to. Anything with speaking, speech and head will do; a Character is what this is for.
phraseEnded() |
True while a phrase boundary has just gone by. Mostly of interest to whatever wants to hang something else off one.
Note: The corresponding handler is onPhraseEnded.