Files
Studio/Assets/Scripts/UVC/UI/UVCRadioButton.cs
2025-05-14 17:00:44 +09:00

81 lines
2.4 KiB
C#

using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace Studio.UVC.UI
{
/// <summary>
/// 값이 없는 상태가 존재하면 안될 때
/// 선택지 중 하나만 골라야 할 때
/// 라디오 버튼 사용
/// </summary>
[RequireComponent(typeof(Toggle))]
public class UVCRadioButton : MonoBehaviour
{
private Toggle toggle;
private TextMeshProUGUI label;
private Image background;
private Image checkmark;
public Toggle Toggle
{
get
{
if (toggle == null)
toggle = GetComponent<Toggle>();
return toggle;
}
}
public TextMeshProUGUI Label
{
get
{
if (label == null)
{
var findText = GetComponentsInChildren<TextMeshProUGUI>();
label = findText.FirstOrDefault(x => x.name.Equals(nameof(label), System.StringComparison.OrdinalIgnoreCase));
}
return label;
}
}
public Image Background
{
get
{
if (background == null)
{
var findText = GetComponentsInChildren<Image>();
background = findText.FirstOrDefault(x => x.name.Equals(nameof(background), System.StringComparison.OrdinalIgnoreCase));
}
return background;
}
}
public Image Checkmark
{
get
{
if (checkmark == null)
{
var findText = GetComponentsInChildren<Image>();
checkmark = findText.FirstOrDefault(x => x.name.Equals(nameof(checkmark), System.StringComparison.OrdinalIgnoreCase));
}
return checkmark;
}
}
private static GameObject prefab;
public static UVCRadioButton Create(string text, Transform parent = null)
{
if (prefab == null)
prefab = Resources.Load("Prefabs/Common/UVCRadioButton") as GameObject;
var asset = Instantiate(prefab, parent);
var radio = asset.GetComponent<UVCRadioButton>();
radio.GetComponentInChildren<TextMeshProUGUI>().text = text;
return radio;
}
}
}