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
|
|
|
|
|
|
{
|
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();
|
2025-05-29 10:36:58 +08:00
|
|
|
|
// please add init code here
|
|
|
|
|
|
TypeEventSystem.Global.Register<OnModuleQuit>((arg) => Hide()).UnRegisterWhenGameObjectDestroyed(gameObject);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
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>();
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
2025-05-28 11:38:55 +08:00
|
|
|
|
// 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);
|
2025-05-29 10:36:58 +08:00
|
|
|
|
sliderItemObj.name = Objs[i];
|
2025-05-27 17:07:13 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>Slider<65><72><EFBFBD><EFBFBD>
|
2025-06-30 16:14:40 +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();
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
else if(slider.value == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
var v= UIKit.GetPanel<UIGuideTip>();
|
2025-06-30 16:14:40 +08:00
|
|
|
|
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-29 10:36:58 +08:00
|
|
|
|
|
|
|
|
|
|
|
2025-05-27 17:07:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
protected override void OnClose()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|