three-player-controller 0.3.6 → 0.3.7

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.
package/README.md CHANGED
@@ -148,7 +148,7 @@ export function playerController(): {
148
148
  setGravity: (gravity: number) => void;
149
149
  setJumpHeight: (jumpHeight: number) => void;
150
150
  setPlayerSpeed: (playerSpeed: number) => void;
151
- setPlayerFlySpeed: (playerFlySpeed: number) => void;
151
+ setflySpeed: (flySpeed: number) => void;
152
152
  setMinCamDistance: (minCamDistance: number) => void;
153
153
  setMaxCamDistance: (maxCamDistance: number) => void;
154
154
  setThirdMouseMode: (thirdMouseMode: 0 | 1 | 2 | 3) => void;
@@ -180,7 +180,7 @@ export function playerController(): {
180
180
  | `setGravity(v)` | 设置重力(传入基准值,内部自动乘以 scale) |
181
181
  | `setJumpHeight(v)` | 设置跳跃高度(传入基准值,内部自动乘以 scale) |
182
182
  | `setPlayerSpeed(v)` | 设置移动速度(传入基准值,内部自动乘以 scale) |
183
- | `setPlayerFlySpeed(v)` | 设置飞行速度(传入基准值,内部自动乘以 scale) |
183
+ | `setflySpeed(v)` | 设置飞行速度(传入基准值,内部自动乘以 scale) |
184
184
  | `setMinCamDistance(v)` | 设置第三人称最小相机距离 |
185
185
  | `setMaxCamDistance(v)` | 设置第三人称最大相机距离 |
186
186
  | `setThirdMouseMode(v)` | 设置第三人称鼠标模式(0~3) |
@@ -251,7 +251,7 @@ type PlayerControllerOptions = {
251
251
  gravity?: number;
252
252
  jumpHeight?: number;
253
253
  speed?: number;
254
- playerFlySpeed?: number;
254
+ flySpeed?: number;
255
255
  rotateY?: number;
256
256
  headObjName?: string;
257
257
  flyEnabled?: boolean;
@@ -293,7 +293,7 @@ type PlayerControllerOptions = {
293
293
  | `playerModel.speed` | `number` | 否 | `300` | 移动速度基准值 |
294
294
  | `playerModel.gravity` | `number` | 否 | `-2400` | 重力加速度基准值 |
295
295
  | `playerModel.jumpHeight` | `number` | 否 | `600` | 跳跃高度基准值 |
296
- | `playerModel.playerFlySpeed` | `number` | 否 | `2100` | 飞行速度基准值 |
296
+ | `playerModel.flySpeed` | `number` | 否 | `2100` | 飞行速度基准值 |
297
297
  | `playerModel.flyEnabled` | `boolean` | 否 | `true` | 是否允许飞行模式 |
298
298
  | `initPos` | `THREE.Vector3` | 否 | `(0,0,0)` | 初始位置 |
299
299
  | `mouseSensity` | `number` | 否 | `5` | 鼠标灵敏度 |
@@ -304,6 +304,7 @@ type PlayerControllerOptions = {
304
304
  | `thirdMouseMode` | `0\|1\|2\|3` | 否 | `1` | 第三人称鼠标模式(见下表) |
305
305
  | `enableZoom` | `boolean` | 否 | `false` | 第三人称是否允许滚轮缩放 |
306
306
  | `enableOverShoulderView` | `boolean` | 否 | `false` | 是否开启过肩视角偏移 |
307
+ | `capsuleRadiusRatio` | `number` | 否 | `1.0` | 玩家胶囊碰撞体的半径系数,值越大碰撞范围越宽 |
307
308
 
308
309
  **thirdMouseMode 说明:**
309
310
 
package/dist/index.d.mts CHANGED
@@ -81,10 +81,11 @@ type PlayerControllerOptions = {
81
81
  gravity?: number;
82
82
  jumpHeight?: number;
83
83
  speed?: number;
84
- playerFlySpeed?: number;
84
+ flySpeed?: number;
85
85
  rotateY?: number;
86
86
  headObjName?: string;
87
87
  flyEnabled?: boolean;
88
+ capsuleRadiusRatio?: number;
88
89
  };
89
90
  initPos?: THREE.Vector3;
90
91
  mouseSensity?: number;
package/dist/index.d.ts CHANGED
@@ -81,10 +81,11 @@ type PlayerControllerOptions = {
81
81
  gravity?: number;
82
82
  jumpHeight?: number;
83
83
  speed?: number;
84
- playerFlySpeed?: number;
84
+ flySpeed?: number;
85
85
  rotateY?: number;
86
86
  headObjName?: string;
87
87
  flyEnabled?: boolean;
88
+ capsuleRadiusRatio?: number;
88
89
  };
89
90
  initPos?: THREE.Vector3;
90
91
  mouseSensity?: number;
package/dist/index.js CHANGED
@@ -337,8 +337,9 @@ var PlayerController = class {
337
337
  this.enableOverShoulderView = false;
338
338
  this.isChangeControllerTransitionTimer = null;
339
339
  // ==================== 玩家基本属性 ====================
340
- this.playerRadius = 45;
341
- this.playerHeight = 180;
340
+ this.playerCapsuleRadius = 45;
341
+ this.playerCapsuleRadiusRatio = 1;
342
+ this.playerCapsuleHeight = 180;
342
343
  // 玩家参考身高
343
344
  this.isFirstPerson = false;
344
345
  this.boundingBoxMinY = 0;
@@ -368,7 +369,7 @@ var PlayerController = class {
368
369
  // 全局车辆共享参数
369
370
  this.vehicleParams = {
370
371
  debug: {
371
- showPhysicsBox: true
372
+ showPhysicsBox: false
372
373
  },
373
374
  chassis: {
374
375
  linearDamping: 0.5,
@@ -714,7 +715,7 @@ var PlayerController = class {
714
715
  this.gravity = (opts.playerModel.gravity ?? -2400) * s;
715
716
  this.jumpHeight = (opts.playerModel.jumpHeight ?? 600) * s;
716
717
  this.playerSpeed = (opts.playerModel.speed ?? 300) * s;
717
- this.playerFlySpeed = (opts.playerModel.playerFlySpeed ?? 2100) * s;
718
+ this.playerFlySpeed = (opts.playerModel.flySpeed ?? 2100) * s;
718
719
  this.curPlayerSpeed = this.playerSpeed;
719
720
  this.playerModel.rotateY = opts.playerModel.rotateY ?? 0;
720
721
  this.playerFlyEnabled = opts.playerModel.flyEnabled ?? true;
@@ -725,6 +726,7 @@ var PlayerController = class {
725
726
  this.orginMaxCamDistance = this.maxCamDistance;
726
727
  this.thirdMouseMode = opts.thirdMouseMode ?? 1;
727
728
  this.enableZoom = opts.enableZoom ?? false;
729
+ this.playerCapsuleRadiusRatio = opts.playerModel.capsuleRadiusRatio ?? 1;
728
730
  const isMobileDevice = () => navigator.maxTouchPoints && navigator.maxTouchPoints > 0 || "ontouchstart" in window || /Mobi|Android|iPhone|iPad|iPod/i.test(navigator.userAgent);
729
731
  this.isShowMobileControls = (opts.isShowMobileControls ?? true) && isMobileDevice();
730
732
  if (this.isShowMobileControls) {
@@ -805,11 +807,10 @@ var PlayerController = class {
805
807
  );
806
808
  this.person = gltf.scene;
807
809
  const { size } = this.getBbox(this.person);
808
- const ratio = this.playerHeight / size.y;
809
- const power = Math.round(Math.log10(ratio));
810
- const modelScale = Math.pow(10, power);
811
- this.playerRadius = Number(Math.min(size.x, size.z).toFixed(0)) * modelScale;
812
- this.playerHeight = Number(size.y.toFixed(0)) * modelScale;
810
+ const ratio = this.playerCapsuleHeight / size.y;
811
+ const modelScale = ratio;
812
+ this.playerCapsuleRadius = Number(Math.min(size.x, size.z).toFixed(0)) * modelScale * this.playerCapsuleRadiusRatio;
813
+ this.playerCapsuleHeight = Number(size.y.toFixed(0)) * modelScale;
813
814
  const scale = this.playerModel.scale;
814
815
  const material = new THREE3.MeshStandardMaterial({
815
816
  color: new THREE3.Color(1, 0, 0),
@@ -820,8 +821,8 @@ var PlayerController = class {
820
821
  wireframe: true,
821
822
  depthWrite: false
822
823
  });
823
- const r = this.playerRadius * scale;
824
- const h = this.playerHeight * scale;
824
+ const r = this.playerCapsuleRadius * scale;
825
+ const h = this.playerCapsuleHeight * scale;
825
826
  this.player = new THREE3.Mesh(
826
827
  new import_RoundedBoxGeometry.RoundedBoxGeometry(r * 2, h, r * 2, 1, 75),
827
828
  material
@@ -1009,8 +1010,7 @@ var PlayerController = class {
1009
1010
  const vehicleModel = await this.loader.loadAsync(opts.url);
1010
1011
  const { size: originalSize } = this.getBbox(vehicleModel.scene);
1011
1012
  const ratio = this.vehicleLength / Math.max(originalSize.x, originalSize.y, originalSize.z);
1012
- const power = Math.round(Math.log10(ratio));
1013
- const modelScale = Math.pow(10, power);
1013
+ const modelScale = ratio;
1014
1014
  const vehicleMixer = new THREE3.AnimationMixer(vehicleModel.scene);
1015
1015
  const animations = vehicleModel.animations ?? [];
1016
1016
  const vehicleActions = /* @__PURE__ */ new Map();
@@ -2166,9 +2166,9 @@ var PlayerController = class {
2166
2166
  );
2167
2167
  if (intersects.length > 0) {
2168
2168
  playerDistanceFromGround = this.player.position.y - intersects[0].point.y;
2169
- const maxH = this.playerHeight * this.playerModel.scale * 0.9;
2170
- const h = this.playerHeight * this.playerModel.scale * 0.75;
2171
- const minH = this.playerHeight * this.playerModel.scale * 0.7;
2169
+ const maxH = this.playerCapsuleHeight * this.playerModel.scale * 0.9;
2170
+ const h = this.playerCapsuleHeight * this.playerModel.scale * 0.75;
2171
+ const minH = this.playerCapsuleHeight * this.playerModel.scale * 0.7;
2172
2172
  if (!this.isFlying) {
2173
2173
  if (playerDistanceFromGround >= maxH) {
2174
2174
  this.playerVelocity.y += delta * this.gravity;
@@ -2316,7 +2316,7 @@ var PlayerController = class {
2316
2316
  }
2317
2317
  if (!this.isFirstPerson) {
2318
2318
  const lookTarget = this.player.position.clone();
2319
- lookTarget.y += this.playerHeight / 8 * this.playerModel.scale;
2319
+ lookTarget.y += this.playerCapsuleHeight / 8 * this.playerModel.scale;
2320
2320
  this.camera.position.sub(this.controls.target);
2321
2321
  this.controls.target.copy(lookTarget);
2322
2322
  this.camera.position.add(lookTarget);