using UnityEngine; using UnityEngine.UI; using QFramework; using System.Collections.Generic; using System; using System.Linq; namespace QFramework.Example { public class UISliderAnimData : UIPanelData { public string title; public string targetObj; } public partial class UISliderAnim : UIPanel { protected override void OnInit(IUIData uiData = null) { mData = uiData as UISliderAnimData ?? new UISliderAnimData(); // please add init code here } protected override void OnOpen(IUIData uiData = null) { Connet.RemoveAllChildren(); mData = uiData as UISliderAnimData ?? new UISliderAnimData(); if (mData != null) { // 解析标题列表 List Objs = mData.title.Split('|')?.ToList(); List sliders = new List(); // 查找目标对象并获取SkinnedMeshRenderer GameObject obj = Utility.FindObj(mData.targetObj.ToString()); SkinnedMeshRenderer skinnedRenderer = obj.GetComponent(); if (skinnedRenderer != null) { // 获取共享网格(包含BlendShapes数据) Mesh mesh = skinnedRenderer.sharedMesh; // 获取BlendShape数量 int blendShapeCount = mesh.blendShapeCount; Debug.Log($"物体 {obj.name} 有 {blendShapeCount} 个BlendShapes"); // 遍历所有BlendShapes并输出信息 for (int i = 0; i < blendShapeCount; i++) { string blendShapeName = mesh.GetBlendShapeName(i); float currentWeight = skinnedRenderer.GetBlendShapeWeight(i); Debug.Log($"BlendShape #{i}: {blendShapeName}, 当前权重: {currentWeight}"); } // 为每个BlendShape创建对应的Slider for (int i = 0; i < Objs.Count; i++) { if (i < blendShapeCount) // 确保BlendShape索引有效 { string blendShapeName = mesh.GetBlendShapeName(i); // 实例化Slider预制体 GameObject sliderItemObj = GameObject.Instantiate(Slider.gameObject, Connet); sliderItemObj.name = blendShapeName; // 设置Slider标题 sliderItemObj.transform.Find("TitleText").GetComponent().text = Objs[i]; // 获取Slider组件并设置初始值 Slider slider = sliderItemObj.GetComponent(); if (slider != null) { slider.minValue = 0f; slider.maxValue = 100f; slider.value = skinnedRenderer.GetBlendShapeWeight(i); // 添加值变化事件 int blendShapeIndex = i; // 避免闭包捕获问题 slider.onValueChanged.AddListener((value) => { skinnedRenderer.SetBlendShapeWeight(blendShapeIndex, value); }); sliders.Add(slider); } } } } else { Debug.LogError($"物体 {obj.name} 上没有SkinnedMeshRenderer组件!"); } } } protected override void OnShow() { } protected override void OnHide() { } protected override void OnClose() { } } }