using UnityEngine; using TMPro; using PrimeTween; namespace Hallucinate.UI { public class ChatBubble : MonoBehaviour { [SerializeField] private TextMeshProUGUI textDisplay; [SerializeField] private CanvasGroup canvasGroup; [SerializeField] private RectTransform bubbleRect; private Transform mainCameraTransform; private void Awake() { mainCameraTransform = Camera.main.transform; canvasGroup.alpha = 0; gameObject.SetActive(false); } private void LateUpdate() { // Billboard effect transform.LookAt(transform.position + mainCameraTransform.rotation * Vector3.forward, mainCameraTransform.rotation * Vector3.up); } public void Show(string text, float duration = 4f) { gameObject.SetActive(true); textDisplay.text = text; // Animation using PrimeTween PrimeTween.Sequence.Create() .Group(Tween.Alpha(canvasGroup, 1f, 0.3f)) .Group(Tween.Scale(bubbleRect, Vector3.zero, Vector3.one, 0.4f, Ease.OutBack)) .Chain(Tween.Delay(duration)) .Chain(Tween.Alpha(canvasGroup, 0f, 0.5f)) .OnComplete(() => gameObject.SetActive(false)); } } }