182 lines
5.7 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;
2025-07-01 17:54:39 +08:00
public string targetObj;
public string HideObject;
2025-05-27 17:07:13 +08:00
}
public partial class UISliderAnim : UIPanel
{
2025-06-18 19:22:16 +08:00
List<Slider> sliders=new List<Slider> { };
protected override void OnInit(IUIData uiData = null)
2025-05-27 17:07:13 +08:00
{
mData = uiData as UISliderAnimData ?? new UISliderAnimData();
// please add init code here
TypeEventSystem.Global.Register<OnModuleQuit>((arg) => Hide()).UnRegisterWhenGameObjectDestroyed(gameObject);
}
2025-07-01 17:54:39 +08:00
Transform[] childsTransforms;
2025-05-27 17:07:13 +08:00
protected override void OnOpen(IUIData uiData = null)
{
2025-06-18 19:22:16 +08:00
sliders?.Clear();
2025-05-27 17:07:13 +08:00
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();
2025-06-18 19:22:16 +08:00
2025-05-27 17:07:13 +08:00
// <20><><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD><EFBFBD>󲢻<EFBFBD>ȡSkinnedMeshRenderer
GameObject obj = Utility.FindObj(mData.targetObj.ToString());
SkinnedMeshRenderer skinnedRenderer = obj.GetComponent<SkinnedMeshRenderer>();
2025-07-01 17:54:39 +08:00
//childsTransforms = transform.GetComponentsInChildren<Transform>(true);
//foreach (var objChild in childsTransforms) {
// objChild.gameObject.SetActive(false);
//}
2025-05-27 17:07:13 +08:00
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>Ϣ
2025-06-18 19:22:16 +08:00
//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 = Objs[i];
2025-05-27 17:07:13 +08:00
// <20><><EFBFBD><EFBFBD>Slider<65><72><EFBFBD><EFBFBD>
2025-06-30 18:18:42 +08:00
//Debug.Log(sliderItemObj+"??");
Slider slider = sliderItemObj.GetComponent<Slider>();
slider.transform.Find("Title").transform.Find("TitleText").GetComponent<Text>().text = Objs[i];
2025-05-27 17:07:13 +08:00
// <20><>ȡSlider<65><72><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ó<EFBFBD>ʼֵ
2025-06-18 19:22:16 +08:00
sliders.Add(slider);
2025-05-27 17:07:13 +08:00
if (slider != null)
{
2025-06-18 19:22:16 +08:00
2025-05-27 17:07:13 +08:00
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) =>
{
2025-06-18 19:22:16 +08:00
//Debug.Log("<22><><EFBFBD><EFBFBD>Slider<65><72>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"+ value);
skinnedRenderer.SetBlendShapeWeight(blendShapeIndex, value);
CheckSliderValues();
2025-05-27 17:07:13 +08:00
});
}
}
}
2025-06-18 19:22:16 +08:00
2025-05-27 17:07:13 +08:00
}
else
{
Debug.LogError($"<22><><EFBFBD><EFBFBD> {obj.name} <20><>û<EFBFBD><C3BB>SkinnedMeshRenderer<65><72><EFBFBD><EFBFBD>!");
}
}
}
2025-06-18 19:22:16 +08:00
private void CheckSliderValues()
{
foreach (Slider slider in sliders)
{
if (slider.value != 0)
{
UIKit.GetPanel<UIGuideTip>()?.Hide();
2025-07-01 17:54:39 +08:00
GameObject obj = Utility.FindObj(mData.HideObject.ToString());
obj.gameObject.SetActive(false);
2025-06-18 19:22:16 +08:00
break;
}
else if(slider.value == 0)
{
2025-07-01 17:54:39 +08:00
//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(() =>
{
});
2025-06-18 19:22:16 +08:00
v.Show();
v.isUpdate = true;
}
}
}
protected override void OnShow()
2025-05-27 17:07:13 +08:00
{
}
protected override void OnHide()
{
2025-05-27 17:07:13 +08:00
}
protected override void OnClose()
{
}
}
}