Files
Colosseum/Assets/External/UI/InterfaceFantasyWarriorHUD/Samples/Scripts/SampleXPBar.cs
dal4segno c265f980db chore: Assets 디렉토리 구조 정리 및 네이밍 컨벤션 적용
- Assets/_Game/ 하위로 게임 에셋 통합
- External/ 패키지 벤더별 분류 (Synty, Animations, UI)
- 에셋 네이밍 컨벤션 확립 및 적용
  (Data_Skill_, Data_SkillEffect_, Prefab_, Anim_, Model_, BT_ 등)
- pre-commit hook으로 네이밍 컨벤션 자동 검사 추가
- RESTRUCTURE_CHECKLIST.md 작성

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-16 19:08:27 +09:00

106 lines
3.0 KiB
C#

// Copyright (c) 2024 Synty Studios Limited. All rights reserved.
//
// Use of this software is subject to the terms and conditions of the Synty Studios End User Licence Agreement (EULA)
// available at: https://syntystore.com/pages/end-user-licence-agreement
//
// Sample scripts are included only as examples and are not intended as production-ready.
using System.Collections.Generic;
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Synty.Interface.FantasyWarriorHUD.Samples
{
/// <summary>
/// A simple XP bar that displays the current XP and level and continually levels-up indefinitely.
/// </summary>
public class SampleXPBar : MonoBehaviour
{
[Header("References")]
public Animator animator;
public Slider xpSlider;
public TMP_Text xpText;
public TMP_Text levelText;
[Header("Parameters")]
public int xpPerLevelUp = 1000;
private int currentLevel;
private float currentXPNormalized;
private float secondsPerLevelUp;
private void Awake()
{
// Set random starting values.
currentLevel = Random.Range(1, 69);
currentXPNormalized = 0;
secondsPerLevelUp = Random.Range(4, 20f);
}
private void Reset()
{
List<RectTransform> children = new List<RectTransform>();
foreach (Transform child in transform)
{
if (child is RectTransform)
{
children.Add(child as RectTransform);
}
}
RectTransform xpObj = children.SingleOrDefault(c => c.name.ToLower().Contains("xp"));
if (xpObj)
{
xpSlider = xpObj.GetComponentInChildren<Slider>();
xpText = xpObj.transform.GetComponentInChildren<TMP_Text>();
}
RectTransform lvlObj = children.SingleOrDefault(c => c.name.ToLower().Contains("level"));
if (lvlObj)
{
levelText = lvlObj.GetComponentInChildren<TMP_Text>();
}
}
private void Update()
{
// Update the XP bar.
if (xpSlider)
{
xpSlider.value = currentXPNormalized;
}
if (xpText)
{
xpText.text = $"{Mathf.RoundToInt(currentXPNormalized * xpPerLevelUp)}/{xpPerLevelUp}";
}
if (levelText)
{
levelText.text = $"{currentLevel}";
}
// If we have enough XP to level up, do so.
if (currentXPNormalized >= 1f)
{
// LEVEL UP!
currentLevel++;
currentXPNormalized = 0;
// Animate level up.
if (animator)
{
animator.SetTrigger("LevelUp");
}
}
// Add XP based on time.
currentXPNormalized += Time.deltaTime / secondsPerLevelUp;
}
}
}