

오늘은 이 체력부분의 왼쪽 반원의 체력부분과 가운데의 현재 체력을 알려주는 이미지 심장 부분을 만들어 볼것이다.

먼저 하트 오브젝트를 만들어주고,

원형의 백그라운드를 설정해 주었다.

그다음 회색모양의 심장을 이미지를 설정해주고,

빨간색 심장을 만든다음 Image Type을 Filled로 바꿔주고 Fill Amount를 1로 설정해준다.
테스트용 스크립트
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TestHeart : MonoBehaviour
{
public int maxValue;
public Image fill;
private int currentValue;
void Start()
{
currentValue = maxValue;
fill.fillAmount = 1;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
Add(10);
if (Input.GetKeyDown(KeyCode.D))
Deduct(3);
}
public void Add(int i)
{
currentValue += i;
if (currentValue > maxValue)
{
currentValue = maxValue;
}
fill.fillAmount = (float)currentValue/maxValue;
}
public void Deduct(int i)
{
currentValue -= i;
if (currentValue < 0)
{
currentValue = 0;
}
fill.fillAmount = (float)currentValue / maxValue;
}
}
이 테스트용 스크립트는 줄어들 이미지에 설정하면되고, 잘 적용이 되었다면 A를 누르게 된다면 빨간색이미지가 차오르게 되며 D를 누르게 되면 빨간색 심장이 빨간색이 점점 사라지게 된다.

다음으로 원모양의 hp를 구현해보겠다.
image는 원을사용하고 Image Type도 마찬가지로 Filled로 설정한후에 Fill Amount는 반원이니 0.5로 설정하였다.

빨간색 원도 마찬가지로 설정하면 완성이다.


테스트를 해보았는데 처음에는 괜찮지만 D키를 입력받으니 원이 빨간색으로 다 차오르게 되었다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class TestCircle : MonoBehaviour
{
public int maxValue = 100;
public Image fill;
private int currentValue;
void Start()
{
currentValue = maxValue / 2; // 초기 fillAmount가 0.5가 되도록 설정
fill.fillAmount = 0.5f; // 초기 fillAmount를 0.5로 설정
}
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
Add(10);
if (Input.GetKeyDown(KeyCode.D))
Deduct(3);
}
public void Add(int i)
{
currentValue += i;
if (currentValue > maxValue)
{
currentValue = maxValue;
}
UpdateFillAmount();
}
public void Deduct(int i)
{
currentValue -= i;
if (currentValue < 0)
{
currentValue = 0;
}
UpdateFillAmount();
}
private void UpdateFillAmount()
{
fill.fillAmount = 0.5f * ((float)currentValue / (maxValue / 2)); // 비율 조정
}
}
이렇게 스크립트를 바꾸니 해결은 됬지만 체력을 똑같이 설정했지만 바깥원 체력 줄어드는 속도와 안에있는 심장의 줄어드는 속도가 다르다.
이부분은 플레이어 배고픔, 스태미너와 컨디션과 연결하면서 해결해야겠다.
왜안되는거지..