1.通过代码来控制blendshape的时候,会出现不能控制的情况
- 将控制blendshape的代码放在LateUpdate下面处理可以冲突
-
void LateUpdate() { if (isStart) { time += Time.deltaTime; if (time <= speed) { a = Mathf.Lerp(0, max, time / speed); } else if (time <= 2 * speed) { a = Mathf.Lerp(max, 0f, (time - speed) / speed); } else { time = 0; speed = Random.Range(0.3f, 0.5f); max = Random.Range(50f, 100f); } skinnedMeshRenderer.SetBlendShapeWeight(2, a); } }2.如果通过Animator控制的时候需要创建Avatar Mask, 进行分来处理
- 创建Avatar Mask,然后分层处理


- 在Animator中设置不同的layer


- 代码播放
private void Awake(){ animator =GetComponent<Animator>(); faceLayer = animator.GetLayerIndex("FaceLayer"); } private void OnStart() //播放基础动作 animator.Play("idel"); //播放表情动作 animator.Play("happy",faceLayer); }
- 创建Avatar Mask,然后分层处理


文章讨论了在Unity中如何避免在使用代码控制BlendShape时可能出现的冲突,以及如何通过设置AvatarMask在Animator中实现动作分层播放。重点在于LateUpdate函数的使用和分层控制逻辑。
3956

被折叠的 条评论
为什么被折叠?



