Skip to content

Commit 81f3274

Browse files
committed
Fix BlendShape anim compatible with multiple SkinMeshRenderer in on… (galacean#1756)
* fix: blendShape anim compatible with multiple SkinMeshRenderer in one entity
1 parent 5f625e8 commit 81f3274

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/AnimationParser.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -203,12 +203,12 @@ export class AnimationParser extends Parser {
203203
if (curve.interpolation === InterpolationType.CubicSpine) {
204204
keyframe.inTangent = Array.from(output.subarray(offset, offset + outputSize));
205205
offset += outputSize;
206-
keyframe.value = output.subarray(offset, offset + outputSize) as Float32Array;
206+
keyframe.value = output.slice(offset, offset + outputSize) as Float32Array;
207207
offset += outputSize;
208208
keyframe.outTangent = Array.from(output.subarray(offset, offset + outputSize));
209209
offset += outputSize;
210210
} else {
211-
keyframe.value = output.subarray(offset, offset + outputSize) as Float32Array;
211+
keyframe.value = output.slice(offset, offset + outputSize) as Float32Array;
212212
offset += outputSize;
213213
}
214214
curve.addKey(keyframe);

0 commit comments

Comments
 (0)