113 lines
3.8 KiB
C#
Raw Normal View History

2025-05-27 17:07:13 +08:00
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)
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
List<string> Objs = mData.title.Split('|')?.ToList();
List<Slider> sliders = new List<Slider>();
// <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD>󲢻<EFBFBD>ȡSkinnedMeshRenderer
GameObject obj = Utility.FindObj(mData.targetObj.ToString());
SkinnedMeshRenderer skinnedRenderer = obj.GetComponent<SkinnedMeshRenderer>();
if (skinnedRenderer != null)
{
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񣨰<EFBFBD><F1A3A8B0><EFBFBD>BlendShapes<65><73><EFBFBD>ݣ<EFBFBD>
Mesh mesh = skinnedRenderer.sharedMesh;
// <20><>ȡBlendShape<70><65><EFBFBD><EFBFBD>
int blendShapeCount = mesh.blendShapeCount;
// Debug.Log($"<22><><EFBFBD><EFBFBD> {obj.name} <20><> {blendShapeCount} <20><>BlendShapes");
2025-05-27 17:07:13 +08:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BlendShapes<65><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
for (int i = 0; i < blendShapeCount; i++)
{
string blendShapeName = mesh.GetBlendShapeName(i);
float currentWeight = skinnedRenderer.GetBlendShapeWeight(i);
// Debug.Log($"BlendShape #{i}: {blendShapeName}, <20><>ǰȨ<C7B0><C8A8>: {currentWeight}");
2025-05-27 17:07:13 +08:00
}
// Ϊÿ<CEAA><C3BF>BlendShape<70><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>Slider
for (int i = 0; i < Objs.Count; i++)
{
if (i < blendShapeCount) // ȷ<><C8B7>BlendShape<70><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
{
string blendShapeName = mesh.GetBlendShapeName(i);
// ʵ<><CAB5><EFBFBD><EFBFBD>SliderԤ<72><D4A4><EFBFBD><EFBFBD>
GameObject sliderItemObj = GameObject.Instantiate(Slider.gameObject, Connet);
sliderItemObj.name = blendShapeName;
// <20><><EFBFBD><EFBFBD>Slider<65><72><EFBFBD><EFBFBD>
sliderItemObj.transform.Find("TitleText").GetComponent<Text>().text = Objs[i];
// <20><>ȡSlider<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʼֵ
Slider slider = sliderItemObj.GetComponent<Slider>();
if (slider != null)
{
slider.minValue = 0f;
slider.maxValue = 100f;
slider.value = skinnedRenderer.GetBlendShapeWeight(i);
// <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>¼<EFBFBD>
int blendShapeIndex = i; // <20><><EFBFBD><EFBFBD><EFBFBD>հ<EFBFBD><D5B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
slider.onValueChanged.AddListener((value) =>
{
skinnedRenderer.SetBlendShapeWeight(blendShapeIndex, value);
});
sliders.Add(slider);
}
}
}
}
else
{
Debug.LogError($"<22><><EFBFBD><EFBFBD> {obj.name} <20><>û<EFBFBD><C3BB>SkinnedMeshRenderer<65><72><EFBFBD><EFBFBD>!");
}
}
}
protected override void OnShow()
{
}
protected override void OnHide()
{
}
protected override void OnClose()
{
}
}
}