layerIndex | 层索引。 |
mask | 用于创建新 LayerMask 的 AvatarMask。 |
设置当前层的遮罩。
此函数从指定 AvatarMask 生成一个层遮罩,并将其应用于指定的层索引。如果您更改 AvatarMask,则需要再次调用此函数来更新层遮罩。
using System.Collections.Generic; using UnityEngine;
using UnityEngine.Playables; using UnityEngine.Animations;
public class LayerMixerPlayable : MonoBehaviour { public AnimationClip clip1; public AnimationClip clip2; public Transform leftShoulder;
PlayableGraph m_Graph; AnimationLayerMixerPlayable m_Mixer;
public float mixLevel = 0.5f;
AvatarMask mask;
public void Start() { Animator animator = GetComponent<Animator>();
mask = new AvatarMask(); mask.AddTransformPath(leftShoulder, true);
m_Graph = PlayableGraph.Create(); var playableOutput = AnimationPlayableOutput.Create(m_Graph, "LayerMixer", animator); playableOutput.SetSourcePlayable(m_Mixer);
// Create two clip playables var clipPlayable1 = AnimationClipPlayable.Create(m_Graph, clip1); var clipPlayable2 = AnimationClipPlayable.Create(m_Graph, clip2);
// Create mixer playable m_Mixer = AnimationLayerMixerPlayable.Create(m_Graph, 2);
// Create two layers, second is setup to override the first layer and affect only left shoulder and childs m_Mixer.ConnectInput(0, clipPlayable1, 0, 1.0f); m_Mixer.ConnectInput(1, clipPlayable2, 0, mixLevel);
m_Mixer.SetLayerMaskFromAvatarMask(1, mask);
m_Graph.Play(); }
public void Update() { m_Mixer.SetInputWeight(1, mixLevel); }
public void OnDestroy() { m_Graph.Destroy(); } }