스테이터스는 HP와 Stamina Ui를 각각 구현하였다.
using UnityEngine;
using UnityEngine.UI;
public class HealthUI : MonoBehaviour
{
Image m_hpImage;
private int m_maxHealth;
private int m_currentHealth;
private PlayerHealth m_playerHealth;
void Start()
{
m_hpImage = GetComponent<Image>();
m_playerHealth = GameObject.FindWithTag("Player").GetComponent<PlayerHealth>();
m_maxHealth = m_playerHealth.GetMaxHealth();
m_currentHealth = m_playerHealth.GetCurrentHealth();
}
void Update()
{
m_currentHealth = m_playerHealth.GetCurrentHealth();
float toFill;
toFill = (float)m_currentHealth / m_maxHealth;
m_hpImage.fillAmount = toFill;
}
}
using UnityEngine;
using UnityEngine.UI;
public class StaminaUI : MonoBehaviour
{
Image m_stImage;
private int m_maxStamina;
private int m_currentStamina;
private PlayerHealth m_playerHealth;
void Start()
{
m_stImage = GetComponent<Image>();
m_playerHealth = GameObject.FindWithTag("Player").GetComponent<PlayerHealth>();
m_maxStamina = m_playerHealth.GetMaxStamina();
m_currentStamina = m_playerHealth.GetCurrentStamina();
}
void Update()
{
m_currentStamina = m_playerHealth.GetCurrentStamina();
float toFill;
toFill = (float)m_currentStamina / m_maxStamina;
m_stImage.fillAmount = toFill;
}
}
이와 같이 만든 후 프리팹으로 관리하여 쉽게 배치할 수 있도록 하였다.
지금까지 만든 기능과 프리팹 등을 만든 상황에서, 프리팹의 내용을 있는 그대로 저장했다간 저작권 위반이 걸릴 소지를 만들 수 있을 것 같았다. 따라서 해당 에셋들을 Imports로 처리하고, 다른 사람이 열람했을 때 에셋이 노출되지 않도록 처리하였다.
플레이어의 스크립트를 수정하여 잠긴 잠겼다는 기능을 표현하였다.
private void DisplayInteractableObjectUI()
{
if (m_detectedObject == null)
{
m_panel.SetActive(false);
return;
}
var interactionKey = PlayerPrefs.GetString("Interaction");
if (m_detectedObject.CompareTag("Item"))
{
m_popupText.text = $"아이템을 얻으려면 [{interactionKey}]를 누르세요.";
m_panel.SetActive(true);
}
else if (m_detectedObject.CompareTag("InteractableObject"))
{
if (m_detectedObject.GetComponent<IsLockedDoor>() != null && m_detectedObject.GetComponent<IsLockedDoor>().IsLocked())
{
m_popupText.text = "잠긴 문입니다. 열쇠를 찾아주세요.";
m_panel.SetActive(true);
}
else
{
m_popupText.text = $"상호작용을 하려면 [{interactionKey}]를 누르세요.";
m_panel.SetActive(true);
}
}
}