diff --git a/packages/effects-core/src/math/value-getter.ts b/packages/effects-core/src/math/value-getter.ts index 183c921e7..fd56fe443 100644 --- a/packages/effects-core/src/math/value-getter.ts +++ b/packages/effects-core/src/math/value-getter.ts @@ -541,7 +541,7 @@ export class BezierCurve extends ValueGetter { } } -export class BezierCurvePath extends ValueGetter { +export class BezierCurvePath extends ValueGetter { curveSegments: Record { } - override getValue (time: number) { + override getValue (time: number): Vector3 { const t = numberToFix(time, 5); let perc = 0, point = new Vector3(); const keyTimeData = Object.keys(this.curveSegments); if (!keyTimeData.length) { - return point.toArray(); + return point; } const keyTimeStart = Number(keyTimeData[0].split('&')[0]); const keyTimeEnd = Number(keyTimeData[keyTimeData.length - 1].split('&')[1]); @@ -600,7 +600,7 @@ export class BezierCurvePath extends ValueGetter { point = pathCurve.getPointInPercent(0); - return point.toArray(); + return point; } if (t >= keyTimeEnd) { @@ -608,7 +608,7 @@ export class BezierCurvePath extends ValueGetter { point = pathCurve.getPointInPercent(1); - return point.toArray(); + return point; } for (let i = 0; i < keyTimeData.length; i++) { @@ -623,7 +623,7 @@ export class BezierCurvePath extends ValueGetter { } } - return point.toArray(); + return point; } getPercValue (curveKey: string, time: number) { @@ -686,9 +686,9 @@ const map: Record = { return new BezierCurve(props); }, - [spec.ValueType.BEZIER_CURVE_PATH] (props: number[][][][]) { + [spec.ValueType.BEZIER_CURVE_PATH] (props: number[][][]) { if (props[0].length === 1) { - return new StaticValue(new Vector3(props[0][0][1][1], props[1][0][1][1], props[2][0][1][1])); + return new StaticValue(new Vector3(...props[1][0])); } return new BezierCurvePath(props); diff --git a/packages/effects-core/src/plugins/cal/calculate-item.ts b/packages/effects-core/src/plugins/cal/calculate-item.ts index b276cdee0..a74a8d64b 100644 --- a/packages/effects-core/src/plugins/cal/calculate-item.ts +++ b/packages/effects-core/src/plugins/cal/calculate-item.ts @@ -13,7 +13,7 @@ export type ItemBasicTransform = { position: Vector3, rotation: Euler, scale: Vector3, - path?: ValueGetter, + path?: ValueGetter, }; export type ItemLinearVelOverLifetime = { diff --git a/packages/effects-core/src/plugins/camera/camera-controller-node.ts b/packages/effects-core/src/plugins/camera/camera-controller-node.ts index e4394dc7d..21b0d03e1 100644 --- a/packages/effects-core/src/plugins/camera/camera-controller-node.ts +++ b/packages/effects-core/src/plugins/camera/camera-controller-node.ts @@ -20,7 +20,7 @@ export class CameraController { fov: ValueGetter, }; private readonly translateOverLifetime?: { - path?: ValueGetter, + path?: ValueGetter, x: ValueGetter, y: ValueGetter, z: ValueGetter, @@ -91,9 +91,7 @@ export class CameraController { if (translateOverLifetime.path) { const val = translateOverLifetime.path.getValue(lifetime); - position.x += val[0]; - position.y += val[1]; - position.z += val[2]; + position.add(val); } } if (rotationOverLifetime) { diff --git a/web-packages/demo/src/single.ts b/web-packages/demo/src/single.ts index 43968a709..d94055b9a 100644 --- a/web-packages/demo/src/single.ts +++ b/web-packages/demo/src/single.ts @@ -1,7 +1,8 @@ import { Player } from '@galacean/effects'; import inspireList from './assets/inspire-list'; -const json = 'https://mdn.alipayobjects.com/mars/afts/file/A*ZrU7SIuNOdkAAAAAAAAAAAAADlB4AQ'; +const json = 'https://mdn.alipayobjects.com/mars/afts/file/A*NXOAQ6Su4sMAAAAAAAAAAAAADlB4AQ'; +// 'https://mdn.alipayobjects.com/mars/afts/file/A*ZrU7SIuNOdkAAAAAAAAAAAAADlB4AQ'; // 'https://mdn.alipayobjects.com/mars/afts/file/A*_DqDToRcM7oAAAAAAAAAAAAADlB4AQ'; // 'https://mdn.alipayobjects.com/mars/afts/file/A*VPbASpxweKAAAAAAAAAAAAAADlB4AQ'; // 'https://mdn.alipayobjects.com/mars/afts/file/A*a8bbR4Zew5AAAAAAAAAAAAAADlB4AQ'; diff --git a/web-packages/test/unit/src/effects-core/composition/camera.spec.ts b/web-packages/test/unit/src/effects-core/composition/camera.spec.ts index f7a3c6503..aec2a4c20 100644 --- a/web-packages/test/unit/src/effects-core/composition/camera.spec.ts +++ b/web-packages/test/unit/src/effects-core/composition/camera.spec.ts @@ -308,9 +308,9 @@ describe('camera item', () => { const pos1 = comp1.camera.position; const val = new BezierCurvePath(lineatPath).getValue(0.5); - expect(pos1.x).to.eql(val[0], 'curve path'); - expect(pos1.y).to.eql(val[1], 'curve path'); - expect(pos1.z).to.eql(val[2], 'curve path'); + expect(pos1.x).to.eql(val.x, 'curve path'); + expect(pos1.y).to.eql(val.y, 'curve path'); + expect(pos1.z).to.eql(val.z, 'curve path'); }); it('camera 2D item affected by parent', async () => {