using System.Collections.Generic; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.UI; namespace BlueWater.Uis { public class PlayerHealthPointUi : MonoBehaviour { [SerializeField, Required] private Transform _healthPointLayout; [SerializeField, Required] private GameObject _healthPointPrefab; [SerializeField, Range(1, 10)] private int _maxHeartCount = 2; [SerializeField] private List _healthPointImageList = new(); // 이미지 리소스 [Title("이미지 리소스")] [SerializeField] private Sprite _fullHeart; [SerializeField] private Sprite _halfHeart; [SerializeField] private Sprite _emptyHeart; private void Awake() { InitializeHealthPoint(); } [Button("컴포넌트 초기화")] private void InitializeComponents() { _healthPointLayout = transform.Find("HealthPointLayout"); } private void InitializeHealthPoint() { foreach (Transform element in _healthPointLayout) { Destroy(element.gameObject); } _healthPointImageList = new List(_maxHeartCount); for (var i = 0; i < _maxHeartCount; i++) { var newHeart = Instantiate(_healthPointPrefab, _healthPointLayout).GetComponent(); _healthPointImageList.Add(newHeart); } } public void SetCurrentHealthPoint(int changedHealthPoint) { var fullHearts = changedHealthPoint / 2; var existHalfHeart = changedHealthPoint % 2 != 0; for (var i = 0; i < _healthPointImageList.Count; i++) { if (i < fullHearts) { _healthPointImageList[i].sprite = _fullHeart; } else if (i == fullHearts && existHalfHeart) { _healthPointImageList[i].sprite = _halfHeart; } else { _healthPointImageList[i].sprite = _emptyHeart; } } } } }