@xrift/world-components 0.30.0 → 0.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,7 @@ import { type Object3D } from 'three';
2
2
  /**
3
3
  * Y軸ビルボードフック
4
4
  * 対象の Object3D を毎フレームカメラに向けてY軸のみ回転させる
5
+ * 親のワールド回転を考慮し、ローカル回転として正しい値を設定する
5
6
  */
6
7
  export declare const useBillboardY: <T extends Object3D>() => import("react").RefObject<T>;
7
8
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/components/BillboardY/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,QAAQ,EAAW,MAAM,OAAO,CAAA;AAM9C;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,QAAQ,mCAc/C,CAAA"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/components/BillboardY/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAS,KAAK,QAAQ,EAAuB,MAAM,OAAO,CAAA;AAQjE;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,QAAQ,mCAuB/C,CAAA"}
@@ -1,12 +1,15 @@
1
1
  import { useFrame } from '@react-three/fiber';
2
2
  import { useRef } from 'react';
3
- import { Vector3 } from 'three';
3
+ import { Euler, Quaternion, Vector3 } from 'three';
4
4
  import { getBillboardYRotation } from './utils';
5
5
  const _cameraWorldPos = new Vector3();
6
6
  const _targetWorldPos = new Vector3();
7
+ const _parentQuat = new Quaternion();
8
+ const _euler = new Euler();
7
9
  /**
8
10
  * Y軸ビルボードフック
9
11
  * 対象の Object3D を毎フレームカメラに向けてY軸のみ回転させる
12
+ * 親のワールド回転を考慮し、ローカル回転として正しい値を設定する
10
13
  */
11
14
  export const useBillboardY = () => {
12
15
  const ref = useRef(null);
@@ -15,7 +18,15 @@ export const useBillboardY = () => {
15
18
  return;
16
19
  state.camera.getWorldPosition(_cameraWorldPos);
17
20
  ref.current.getWorldPosition(_targetWorldPos);
18
- ref.current.rotation.y = getBillboardYRotation(_cameraWorldPos, _targetWorldPos);
21
+ const worldRotationY = getBillboardYRotation(_cameraWorldPos, _targetWorldPos);
22
+ if (ref.current.parent) {
23
+ ref.current.parent.getWorldQuaternion(_parentQuat);
24
+ _euler.setFromQuaternion(_parentQuat, 'YXZ');
25
+ ref.current.rotation.y = worldRotationY - _euler.y;
26
+ }
27
+ else {
28
+ ref.current.rotation.y = worldRotationY;
29
+ }
19
30
  });
20
31
  return ref;
21
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/components/BillboardY/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAiB,OAAO,EAAE,MAAM,OAAO,CAAA;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAE/C,MAAM,eAAe,GAAG,IAAI,OAAO,EAAE,CAAA;AACrC,MAAM,eAAe,GAAG,IAAI,OAAO,EAAE,CAAA;AAErC;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAuB,EAAE;IACpD,MAAM,GAAG,GAAG,MAAM,CAAI,IAAI,CAAC,CAAA;IAE3B,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;QACjB,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,OAAM;QACxB,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAA;QAC9C,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAA;QAC7C,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,qBAAqB,CAC5C,eAAe,EACf,eAAe,CAChB,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/components/BillboardY/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,KAAK,EAAiB,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAE/C,MAAM,eAAe,GAAG,IAAI,OAAO,EAAE,CAAA;AACrC,MAAM,eAAe,GAAG,IAAI,OAAO,EAAE,CAAA;AACrC,MAAM,WAAW,GAAG,IAAI,UAAU,EAAE,CAAA;AACpC,MAAM,MAAM,GAAG,IAAI,KAAK,EAAE,CAAA;AAE1B;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAuB,EAAE;IACpD,MAAM,GAAG,GAAG,MAAM,CAAI,IAAI,CAAC,CAAA;IAE3B,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE;QACjB,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,OAAM;QACxB,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAA;QAC9C,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAA;QAE7C,MAAM,cAAc,GAAG,qBAAqB,CAC1C,eAAe,EACf,eAAe,CAChB,CAAA;QAED,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACvB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAA;YAClD,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;YAC5C,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,cAAc,GAAG,MAAM,CAAC,CAAC,CAAA;QACpD,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,GAAG,cAAc,CAAA;QACzC,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xrift/world-components",
3
- "version": "0.30.0",
3
+ "version": "0.30.1",
4
4
  "description": "Shared components and utilities for Xrift worlds",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",