피격 데미지를 표시할 UI 생성
Hierarchy 우클릭 - UI - Text로 하나 생성해줍니다.
스크립트 생성
Damage를 표시할 스크립트를 하나 만들어줍니다.
public class UIDamage : MonoBehaviour { [SerializeField]private TextMeshProUGUI damageText; [SerializeField]private float displayDuration = 1.5f; // 텍스트가 보이는 시간 설정 [SerializeField]private float fadeDuration = 1.0f; // 텍스트가 사라지는 시간 설정 private Coroutine fadeOutCoroutine; public void ShowDamageText(int damage, Vector3 position) { if (fadeOutCoroutine != null) { StopCoroutine(fadeOutCoroutine); } damageText.text = damage.ToString(); damageText.transform.position = Camera.main.WorldToScreenPoint(position); fadeOutCoroutine = StartCoroutine(FadeOutText()); } IEnumerator FadeOutText() { float elapsedTime = 0f; Color initialColor = damageText.color; while (elapsedTime < fadeDuration) { float alpha = Mathf.Lerp(1f, 0f, elapsedTime / fadeDuration); damageText.color = new Color(initialColor.r, initialColor.g, initialColor.b, alpha); elapsedTime += Time.deltaTime; yield return null; } damageText.text = ""; damageText.color = initialColor; } }
코루틴으로 텍스트를 일정 시간 후 비활성화 시켜주고 ShowDamageText에서 데미지 값과 포지션 값을 받아서 표시를 해 줍니다.
Damage오브젝트 생성
Canvas 아래에 빈 오브젝트를 만들고 Damage로 이름을 바꿔줍니다.
위의 스크립트를 넣어주고 아까 만들었던 텍스트를 할당해줍니다.
UIManagerd에 연결
UIManager에 연결해서 싱글톤을 이용합니다.
[Header("Damage")] public UIDamage damageUI;
Take Damage에 연결
피격 부분에 ShowDamageText함수를 넣어 줍니다.
if (collision.gameObject.tag == "Enemy") { UIManager.Instance.damageUI.ShowDamageText((int)damage, collision.contacts[0].point); }
결과
미니맵 ui 추가
혈흔 효과 풀 매니저 합치기
피격데미지 보여주기기