@@ -26,11 +26,13 @@ export default function Ecctrl({
26
26
capsuleHalfHeight = 0.35 ,
27
27
capsuleRadius = 0.3 ,
28
28
floatHeight = 0.3 ,
29
+ characterInitDir = 0 , // in rad
29
30
followLight = false ,
30
31
// Follow camera setups
31
32
camInitDis = - 5 ,
32
33
camMaxDis = - 7 ,
33
34
camMinDis = - 0.7 ,
35
+ camInitDir = 0 , // in rad
34
36
// Base control setups
35
37
maxVelLimit = 2.5 ,
36
38
turnVelMultiplier = 0.2 ,
@@ -57,7 +59,7 @@ export default function Ecctrl({
57
59
// Slope Ray setups
58
60
showSlopeRayOrigin = false ,
59
61
slopeMaxAngle = 1 , // in rad
60
- slopeRayOriginOffest = capsuleRadius - 0.02 ,
62
+ slopeRayOriginOffest = capsuleRadius - 0.03 ,
61
63
slopeRayLength = capsuleRadius + 3 ,
62
64
slopeRayDir = { x : 0 , y : - 1 , z : 0 } ,
63
65
slopeUpExtraForce = 0.1 ,
@@ -639,6 +641,13 @@ export default function Ecctrl({
639
641
) ;
640
642
} , [ autoBalance ] ) ;
641
643
644
+ useEffect ( ( ) => {
645
+ // Initialize character facing direction
646
+ modelEuler . y = characterInitDir
647
+ // Initialize camera facing direction
648
+ pivot . rotation . y = camInitDir
649
+ } , [ ] )
650
+
642
651
useFrame ( ( state , delta ) => {
643
652
// Character current position
644
653
if ( characterRef . current ) {
@@ -1020,11 +1029,13 @@ export interface EcctrlProps extends RigidBodyProps {
1020
1029
capsuleHalfHeight ?: number ;
1021
1030
capsuleRadius ?: number ;
1022
1031
floatHeight ?: number ;
1032
+ characterInitDir ?: number ;
1023
1033
followLight ?: boolean ;
1024
1034
// Follow camera setups
1025
1035
camInitDis ?: number ;
1026
1036
camMaxDis ?: number ;
1027
1037
camMinDis ?: number ;
1038
+ camInitDir ?: number ;
1028
1039
// Base control setups
1029
1040
maxVelLimit ?: number ;
1030
1041
turnVelMultiplier ?: number ;
0 commit comments