BlendShapeClipHandler.cs
1.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
using UnityEngine;
using System.Linq;
using System;
namespace VRM
{
[Obsolete("Use VRMBlendShapeProxy")]
public class BlendShapeClipHandler
{
BlendShapeClip m_clip;
public BlendShapeClip Cilp
{
get { return m_clip; }
}
SkinnedMeshRenderer[] m_renderers;
public BlendShapeClipHandler(BlendShapeClip clip, Transform transform)
{
m_clip = clip;
if (m_clip != null && m_clip.Values != null && transform != null)
{
m_renderers = m_clip.Values.Select(x =>
{
var target = UniGLTF.UnityExtensions.GetFromPath(transform, x.RelativePath);
return target.GetComponent<SkinnedMeshRenderer>();
})
.ToArray();
}
}
public float LastValue
{
get;
private set;
}
public void Apply(float value)
{
LastValue = value;
if (m_clip == null) return;
if (m_renderers == null) return;
for (int i = 0; i < m_clip.Values.Length; ++i)
{
var binding = m_clip.Values[i];
var target = m_renderers[i];
if (binding.Index >= 0 && binding.Index < target.sharedMesh.blendShapeCount)
{
target.SetBlendShapeWeight(binding.Index, binding.Weight * value);
}
}
}
}
}