using UnityEngine;
using UnityEngine.UI;
using TMPro;
///
/// Body透明度控制器
/// 提供运行时调整Body模型透明度的功能
///
public class BodyAlphaController : MonoBehaviour
{
[Header("UI 控件")]
public Slider alphaSlider;
public TextMeshProUGUI alphaValueText;
public Button resetButton;
[Header("设置")]
[Range(0f, 1f)]
public float defaultAlpha = 0.6f;
public bool showDebugInfo = false;
private ProcessModelMatData materialProcessor;
void Start()
{
// 查找材质处理组件
FindMaterialProcessor();
// 初始化UI
InitializeUI();
}
private void FindMaterialProcessor()
{
// 尝试在场景中查找ProcessModelMatData组件
materialProcessor = FindObjectOfType();
if (materialProcessor == null)
{
Debug.LogError("BodyAlphaController: 未找到ProcessModelMatData组件!");
}
else if (showDebugInfo)
{
Debug.Log("BodyAlphaController: 成功找到ProcessModelMatData组件");
}
}
private void InitializeUI()
{
if (alphaSlider != null)
{
alphaSlider.minValue = 0f;
alphaSlider.maxValue = 1f;
alphaSlider.value = defaultAlpha;
alphaSlider.onValueChanged.AddListener(OnAlphaSliderChanged);
}
if (resetButton != null)
{
resetButton.onClick.AddListener(ResetToDefault);
}
// 更新显示
UpdateAlphaDisplay();
// 应用默认透明度
SetBodyAlpha(defaultAlpha);
}
private void OnAlphaSliderChanged(float value)
{
SetBodyAlpha(value);
UpdateAlphaDisplay();
}
private void UpdateAlphaDisplay()
{
if (alphaValueText != null && alphaSlider != null)
{
float percentage = alphaSlider.value * 100f;
alphaValueText.text = $"{percentage:F0}%";
}
}
///
/// 设置Body的透明度
///
/// 透明度值
public void SetBodyAlpha(float alpha)
{
if (materialProcessor != null)
{
materialProcessor.SetBodyAlpha(alpha);
// 通知状态保持器保存新状态
if (MaterialStateKeeper.Instance != null)
{
MaterialStateKeeper.Instance.SetAndSaveBodyAlpha(alpha);
}
if (showDebugInfo)
{
Debug.Log($"BodyAlphaController: 设置Body透明度为 {alpha:F2}");
}
}
}
///
/// 重置到默认透明度
///
public void ResetToDefault()
{
if (alphaSlider != null)
{
alphaSlider.value = defaultAlpha;
}
SetBodyAlpha(defaultAlpha);
UpdateAlphaDisplay();
if (showDebugInfo)
{
Debug.Log("BodyAlphaController: 重置Body透明度到默认值");
}
}
///
/// 获取当前Body的透明度
///
///
public float GetCurrentBodyAlpha()
{
if (materialProcessor != null)
{
return materialProcessor.GetBodyAlpha();
}
return defaultAlpha;
}
///
/// 设置为完全不透明
///
public void SetOpaque()
{
if (alphaSlider != null)
{
alphaSlider.value = 1f;
}
SetBodyAlpha(1f);
UpdateAlphaDisplay();
}
///
/// 设置为半透明
///
public void SetSemiTransparent()
{
float semiAlpha = 0.5f;
if (alphaSlider != null)
{
alphaSlider.value = semiAlpha;
}
SetBodyAlpha(semiAlpha);
UpdateAlphaDisplay();
}
void OnDestroy()
{
// 清理事件监听
if (alphaSlider != null)
{
alphaSlider.onValueChanged.RemoveListener(OnAlphaSliderChanged);
}
if (resetButton != null)
{
resetButton.onClick.RemoveListener(ResetToDefault);
}
}
}