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); } } }