182 lines
5.7 KiB
C#
182 lines
5.7 KiB
C#
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 string HideObject;
|
||
|
||
}
|
||
public partial class UISliderAnim : UIPanel
|
||
{
|
||
List<Slider> sliders=new List<Slider> { };
|
||
|
||
|
||
protected override void OnInit(IUIData uiData = null)
|
||
{
|
||
mData = uiData as UISliderAnimData ?? new UISliderAnimData();
|
||
// please add init code here
|
||
TypeEventSystem.Global.Register<OnModuleQuit>((arg) => Hide()).UnRegisterWhenGameObjectDestroyed(gameObject);
|
||
|
||
}
|
||
Transform[] childsTransforms;
|
||
protected override void OnOpen(IUIData uiData = null)
|
||
{
|
||
|
||
sliders?.Clear();
|
||
|
||
|
||
Connet.RemoveAllChildren();
|
||
|
||
mData = uiData as UISliderAnimData ?? new UISliderAnimData();
|
||
if (mData != null)
|
||
{
|
||
|
||
// 解析标题列表
|
||
List<string> Objs = mData.title.Split('|')?.ToList();
|
||
|
||
|
||
// 查找目标对象并获取SkinnedMeshRenderer
|
||
GameObject obj = Utility.FindObj(mData.targetObj.ToString());
|
||
SkinnedMeshRenderer skinnedRenderer = obj.GetComponent<SkinnedMeshRenderer>();
|
||
|
||
//childsTransforms = transform.GetComponentsInChildren<Transform>(true);
|
||
//foreach (var objChild in childsTransforms) {
|
||
// objChild.gameObject.SetActive(false);
|
||
|
||
//}
|
||
|
||
|
||
|
||
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 = Objs[i];
|
||
|
||
// 设置Slider标题
|
||
//Debug.Log(sliderItemObj+"??");
|
||
Slider slider = sliderItemObj.GetComponent<Slider>();
|
||
|
||
slider.transform.Find("Title").transform.Find("TitleText").GetComponent<Text>().text = Objs[i];
|
||
|
||
|
||
// 获取Slider组件并设置初始值
|
||
|
||
sliders.Add(slider);
|
||
if (slider != null)
|
||
{
|
||
|
||
slider.minValue = 0f;
|
||
slider.maxValue = 100f;
|
||
slider.value = skinnedRenderer.GetBlendShapeWeight(i);
|
||
|
||
// 添加值变化事件
|
||
int blendShapeIndex = i; // 避免闭包捕获问题
|
||
slider.onValueChanged.AddListener((value) =>
|
||
{
|
||
//Debug.Log("滑动Slider的值???"+ value);
|
||
skinnedRenderer.SetBlendShapeWeight(blendShapeIndex, value);
|
||
CheckSliderValues();
|
||
});
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
}
|
||
else
|
||
{
|
||
Debug.LogError($"物体 {obj.name} 上没有SkinnedMeshRenderer组件!");
|
||
}
|
||
|
||
|
||
}
|
||
}
|
||
|
||
|
||
private void CheckSliderValues()
|
||
{
|
||
foreach (Slider slider in sliders)
|
||
{
|
||
if (slider.value != 0)
|
||
{
|
||
UIKit.GetPanel<UIGuideTip>()?.Hide();
|
||
GameObject obj = Utility.FindObj(mData.HideObject.ToString());
|
||
obj.gameObject.SetActive(false);
|
||
break;
|
||
}
|
||
else if(slider.value == 0)
|
||
{
|
||
//foreach (var objChild in childsTransforms)
|
||
//{
|
||
// objChild.gameObject.SetActive(true);
|
||
|
||
//}
|
||
GameObject obj = Utility.FindObj(mData.HideObject.ToString());
|
||
obj.gameObject.SetActive(true);
|
||
|
||
|
||
|
||
var v= UIKit.GetPanel<UIGuideTip>();
|
||
var Data = UIKit.GetPanel<UIGuideTip>().Data;
|
||
UIKit.OpenPanelAsync<UIGuideTip>(uiData: Data, canvasLevel: UILevel.Common).ToAction().StartGlobal(() =>
|
||
{
|
||
|
||
});
|
||
|
||
v.Show();
|
||
v.isUpdate = true;
|
||
|
||
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
protected override void OnShow()
|
||
{
|
||
}
|
||
|
||
protected override void OnHide()
|
||
{
|
||
|
||
|
||
}
|
||
|
||
protected override void OnClose()
|
||
{
|
||
}
|
||
}
|
||
}
|