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 +5 -4
- package/dist/index.d.mts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +17 -17
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17 -17
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
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
|
-
|
|
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
|
-
| `
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
341
|
-
this.
|
|
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:
|
|
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.
|
|
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.
|
|
809
|
-
const
|
|
810
|
-
|
|
811
|
-
this.
|
|
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.
|
|
824
|
-
const h = this.
|
|
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
|
|
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.
|
|
2170
|
-
const h = this.
|
|
2171
|
-
const minH = this.
|
|
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.
|
|
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);
|