Projext/Assets/02_Scripts/UI/HUD/Player Stat UI.cs
hydrozen e989d20668 카툰 쉐이더 추가 + 중복 스크립트 수정 + 전체 업데이트
- ToonPostProcess.shader: 횃불 고딕 스타일 후처리 쉐이더 (Built-in RP)
- ToonCameraEffect.cs: 카메라 자동 부착 후처리 스크립트
- 중복 UI 스크립트 제거 (MenuIntroController, ToggleCustom)
- 씬, 프리팹, 애니메이션 등 전체 업데이트

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-22 12:31:16 +09:00

58 lines
4.0 KiB
C#

using UnityEngine; // 유니티 엔진의 기본 기능을 불러올거에요 -> UnityEngine을
using TMPro; // 텍스트메쉬프로 기능을 사용할거에요 -> TMPro를
public class PlayerStatsUI : MonoBehaviour // 클래스를 선언할거에요 -> MonoBehaviour를 상속받는 PlayerStatsUI를
{
[Header("--- 데이터 연결 ---")] // 인스펙터 창에 제목을 표시할거에요 -> --- 데이터 연결 --- 을
[SerializeField] private Stats playerStats; // 변수를 선언할거에요 -> 플레이어 스탯 스크립트를
[Header("--- UI 오브젝트 ---")] // 인스펙터 창에 제목을 표시할거에요 -> --- UI 오브젝트 --- 를
[SerializeField] private GameObject statWindowPanel; // 변수를 선언할거에요 -> 스탯 창 패널 오브젝트를
[Header("--- 텍스트 UI ---")] // 인스펙터 창에 제목을 표시할거에요 -> --- 텍스트 UI --- 를
[SerializeField] private TextMeshProUGUI maxHealthText; // 변수를 선언할거에요 -> 최대 체력 텍스트 UI를
// [제거] strengthText 변수는 인스펙터에서 비워두거나 삭제하세요.
[SerializeField] private TextMeshProUGUI damageText; // 변수를 선언할거에요 -> 데미지 텍스트 UI를
[SerializeField] private TextMeshProUGUI speedText; // 변수를 선언할거에요 -> 이동속도 텍스트 UI를
private void Start() // 함수를 실행할거에요 -> 스크립트 시작 시 Start를
{
if (statWindowPanel != null) statWindowPanel.SetActive(false); // 조건이 맞으면 실행할거에요 -> 스탯 창이 있다면 처음에 끄기를
}
public void ToggleWindow() // 함수를 선언할거에요 -> 스탯 창을 켜고 끄는 ToggleWindow를
{
if (statWindowPanel == null) return; // 조건이 맞으면 중단할거에요 -> 패널이 연결되지 않았다면
bool isActive = !statWindowPanel.activeSelf; // 값을 반전시킬거에요 -> 현재 활성화 상태를 뒤집어서
statWindowPanel.SetActive(isActive); // 설정을 바꿀거에요 -> 패널의 활성화 상태를
if (isActive) UpdateStatTexts(); // 조건이 맞으면 실행할거에요 -> 창이 켜졌다면 텍스트 갱신을
}
public void UpdateStatTexts() // 함수를 선언할거에요 -> 스탯 텍스트들을 갱신하는 UpdateStatTexts를
{
if (playerStats == null) return; // 조건이 맞으면 중단할거에요 -> 스탯 데이터가 없다면
maxHealthText.text = $"MaxHP: {playerStats.MaxHealth}"; // 텍스트를 바꿀거에요 -> 최대 체력 수치로
// ✨ [수정] 힘 텍스트 업데이트 로직 삭제
damageText.text = $"Damage: {playerStats.TotalAttackDamage} (+{playerStats.weaponDamage})"; // 텍스트를 바꿀거에요 -> 총 공격력과 무기 공격력으로
// ✨ [수정] 무게 페널티 없이 현재 속도만 깔끔하게 표기
speedText.text = $"Speed: {playerStats.CurrentMoveSpeed:F1}"; // 텍스트를 바꿀거에요 -> 현재 이동 속도로 (소수점 1자리)
}
// ─────────────────────────────────────────────────────────────
// 외부 연결 API (DungeonSceneSetup 폴백 모드용)
// ─────────────────────────────────────────────────────────────
/// <summary>
/// 런타임에서 플레이어 스탯 참조를 설정합니다.
/// DungeonSceneSetup의 폴백 모드에서 호출됩니다.
/// </summary>
public void SetPlayerStats(Stats newStats) // 함수를 정의할거에요 -> 플레이어 스탯 런타임 설정을
{
if (newStats == null) return; // 방어할거에요 -> null이면 중단
playerStats = newStats; // 설정할거에요 -> 새 스탯 참조를
Debug.Log($"[PlayerStatsUI] 스탯 연결 완료: {newStats.gameObject.name}"); // 로그를 찍을거에요
}
}