Something like this:
// on the character
[SerializedField]
Text mTextOverHead;
Transform mTransform;
Transform mTextOverTransform;
void Awake() {
mTransform = transform;
mTextOverTransform = mTextOverHead.transform;
}
void LateUpdate() {
Vector3 screenPos = Camera.main.WorldToScreenPoint(mTransform.position);
// add a tiny bit of height?
screenPos.y += 2; // adjust as you see fit.
mTextOverTransform.position = screenPos;
}