178 lines
4.3 KiB
C#
178 lines
4.3 KiB
C#
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
using TMPro;
|
||
|
||
/// <summary>
|
||
/// Body透明度控制器
|
||
/// 提供运行时调整Body模型透明度的功能
|
||
/// </summary>
|
||
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<ProcessModelMatData>();
|
||
|
||
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}%";
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 设置Body的透明度
|
||
/// </summary>
|
||
/// <param name="alpha">透明度值</param>
|
||
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}");
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 重置到默认透明度
|
||
/// </summary>
|
||
public void ResetToDefault()
|
||
{
|
||
if (alphaSlider != null)
|
||
{
|
||
alphaSlider.value = defaultAlpha;
|
||
}
|
||
SetBodyAlpha(defaultAlpha);
|
||
UpdateAlphaDisplay();
|
||
|
||
if (showDebugInfo)
|
||
{
|
||
Debug.Log("BodyAlphaController: 重置Body透明度到默认值");
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 获取当前Body的透明度
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public float GetCurrentBodyAlpha()
|
||
{
|
||
if (materialProcessor != null)
|
||
{
|
||
return materialProcessor.GetBodyAlpha();
|
||
}
|
||
return defaultAlpha;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 设置为完全不透明
|
||
/// </summary>
|
||
public void SetOpaque()
|
||
{
|
||
if (alphaSlider != null)
|
||
{
|
||
alphaSlider.value = 1f;
|
||
}
|
||
SetBodyAlpha(1f);
|
||
UpdateAlphaDisplay();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 设置为半透明
|
||
/// </summary>
|
||
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);
|
||
}
|
||
}
|
||
} |