Skip to content

Commit ad3821d

Browse files
authoredSep 15, 2023
Fix BlendShape anim compatible with multiple SkinMeshRenderer in on… (#1756)
* fix: blendShape anim compatible with multiple SkinMeshRenderer in one entity
1 parent fcc37b5 commit ad3821d

File tree

2 files changed

+10
-6
lines changed

2 files changed

+10
-6
lines changed
 

‎packages/core/src/animation/internal/animationCurveOwner/assembler/BlendShapeWeightsAnimationCurveOwnerAssembler.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,22 @@ import { IAnimationCurveOwnerAssembler } from "./IAnimationCurveOwnerAssembler";
77
* @internal
88
*/
99
export class BlendShapeWeightsAnimationCurveOwnerAssembler implements IAnimationCurveOwnerAssembler<Float32Array> {
10-
private _skinnedMeshRenderer: SkinnedMeshRenderer;
10+
private _skinnedMeshRenderer: SkinnedMeshRenderer[] = [];
1111

1212
initialize(owner: AnimationCurveOwner<KeyframeValueType>): void {
13-
this._skinnedMeshRenderer = owner.target.getComponent(SkinnedMeshRenderer);
13+
// @todo: Compatible with multiple SkinnedMeshRenderer in a entity, optimize later.
14+
owner.target.getComponents(SkinnedMeshRenderer, this._skinnedMeshRenderer);
1415
}
1516

1617
getTargetValue(): Float32Array {
17-
return this._skinnedMeshRenderer.blendShapeWeights;
18+
return this._skinnedMeshRenderer[0].blendShapeWeights;
1819
}
1920

2021
setTargetValue(value: Float32Array): void {
21-
this._skinnedMeshRenderer.blendShapeWeights = value;
22+
const skinnedMeshRenderer = this._skinnedMeshRenderer;
23+
for (let i = 0, n = skinnedMeshRenderer.length; i < n; i++) {
24+
skinnedMeshRenderer[i].blendShapeWeights = value;
25+
}
2226
}
2327
}
2428

‎packages/loader/src/gltf/parser/GLTFAnimationParser.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -196,12 +196,12 @@ export class GLTFAnimationParser extends GLTFParser {
196196
if (curve.interpolation === InterpolationType.CubicSpine) {
197197
keyframe.inTangent = Array.from(output.subarray(offset, offset + outputSize));
198198
offset += outputSize;
199-
keyframe.value = output.subarray(offset, offset + outputSize) as Float32Array;
199+
keyframe.value = output.slice(offset, offset + outputSize) as Float32Array;
200200
offset += outputSize;
201201
keyframe.outTangent = Array.from(output.subarray(offset, offset + outputSize));
202202
offset += outputSize;
203203
} else {
204-
keyframe.value = output.subarray(offset, offset + outputSize) as Float32Array;
204+
keyframe.value = output.slice(offset, offset + outputSize) as Float32Array;
205205
offset += outputSize;
206206
}
207207
curve.addKey(keyframe);

0 commit comments

Comments
 (0)
Please sign in to comment.