using UnityEngine; public class HUDBase : MyCoroutine { protected RectTransform m_RectTransform, m_CanvasRect; protected Transform m_Target; protected Camera m_Camera; protected float OffTime; protected bool isUpdate = true; bool isRect = false, isCanvasRect = false, isMainCam = false, isTarget = false; void Init() { if (!isRect) { m_RectTransform = GetComponent(); isRect = m_RectTransform; } if (!isCanvasRect) { m_CanvasRect = GetComponentInParent().GetComponent(); isCanvasRect = m_CanvasRect; } if (!isMainCam) { m_Camera = Camera.main; isMainCam = m_Camera; } } public void Set_Target(Transform _target) { Init(); m_Target = _target; isTarget = m_Target; } void Update() { if (isUpdate && isTarget && isCanvasRect && isMainCam) Set_Pos(); if (OffTime > 0f) { OffTime -= Time.deltaTime; if (OffTime <= 0f) Off(false); } } protected void Set_Pos() { Vector2 ViewportPosition = m_Camera.WorldToViewportPoint(m_Target.position); Vector2 WorldObject_ScreenPosition = new Vector2( (ViewportPosition.x * m_CanvasRect.sizeDelta.x) - (m_CanvasRect.sizeDelta.x * 0.5f), (ViewportPosition.y * m_CanvasRect.sizeDelta.y) - (m_CanvasRect.sizeDelta.y * 0.5f) - 15f); m_RectTransform.anchoredPosition = WorldObject_ScreenPosition; } public static string Get_TextColor(eAttackType _attacktype) { switch (_attacktype) { default: case eAttackType.Physics: return ""; case eAttackType.Magic: return ""; case eAttackType.Pure: return ""; } } public void Off(bool deltarget) { gameObject.SetActive(false); if (deltarget) { m_Target = null; isTarget = false; } Init(); m_RectTransform.anchoredPosition = Vector3.one * 10000f; // 멀리 보내야 다음에 켜질 때 깜빡임 없어짐 } }