XR 플밍 - (휴일 작업) 프로젝트 GwisinRun 4.3일차 (5/5)

이형원·2025년 5월 5일
0

XR플밍

목록 보기
64/215

1. 플레이어 스테이터스 UI의 구현

스테이터스는 HP와 Stamina Ui를 각각 구현하였다.

  • Hp 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;
    }
}
  • Stamina UI
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;
    }
}

이와 같이 만든 후 프리팹으로 관리하여 쉽게 배치할 수 있도록 하였다.

2. Imports로의 처리

지금까지 만든 기능과 프리팹 등을 만든 상황에서, 프리팹의 내용을 있는 그대로 저장했다간 저작권 위반이 걸릴 소지를 만들 수 있을 것 같았다. 따라서 해당 에셋들을 Imports로 처리하고, 다른 사람이 열람했을 때 에셋이 노출되지 않도록 처리하였다.

3. 문이 잠겼다고 표기하는 기능 구현

플레이어의 스크립트를 수정하여 잠긴 잠겼다는 기능을 표현하였다.

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);
        }
    }
}
profile
게임 만들러 코딩 공부중

0개의 댓글