BabyJS Posted January 16, 2017 Share Posted January 16, 2017 I'm using a FreeCamera, gravity,etc... and when i look at the sky and press W to go forward i go up and can fly, the same if i look at the floor and press back. I want that with WASD the camera moves without take the Y.rotation in consideration, because i still need to move the camera and rotate to look everywhere. How can i achieve that? I tried with "Camera.CamFrontX(Distance)" , Camera.DirectionX(AxisX, AxisY, AxisZ) ,etc... to fix the Y.Rotation value but never got the desired behaviour, sometimes the Y is limited and i can't climb ramps or stairs, other the collisions are not detected or other weird stuff. Quote Link to comment Share on other sites More sharing options...
BabyJS Posted January 17, 2017 Author Share Posted January 17, 2017 The thing is create some kind of switch so: Deactivated : The camera not take the Y.Rotation in consideration and you can only move in X/Z axis. But if you find a ramp or stairs you still can climb it. Activated: The actual free camera, to be used as a "Jetpack behaviour" for the player on you can fly. Any ideas how to achieve that? Quote Link to comment Share on other sites More sharing options...
GameMonetize Posted January 17, 2017 Share Posted January 17, 2017 Hey! You must enable gravity: camera.applyGravity = true Quote Link to comment Share on other sites More sharing options...
Wingnut Posted January 17, 2017 Share Posted January 17, 2017 Hi Matriax. Ahh, Deltakosh beat me to it. Oh well... here's more: A little playground demo... where a "camMesh" box is created, and then the free camera is parented to the box, and then the box uses a handy little moveCamera() function, to get the job done. In this demo, the camera (camMesh) is always moving forward... slowly. (Notice .moveCamera() is called repeatedly from inside the renderLoop at line 63) The reason it is able to climb the ramp... yet not climb the SIDES of the ramp... is based upon the size and elliptic shape... of camMesh.ellipsoid (a vector 3 that determines the scale of a mesh collider). You can play with camMesh.ellipsoid values... while raising the ramp height. If too much raising of ramp, camMesh will not be able to climb it anymore. The edge gets higher than the center of its .ellipsoid size. Remember the camMesh.ellipsoid is the RADIUS of the invisible collider, not diameter. You can view the collision .ellipsoid on cameras and mesh... by creating a sphere of the same size, and parenting it to camMesh. It might help if it is .visibility = .5; (so you can see-through it.) Gravity is also handled... by moveCamera() function, too. Later, when you want to use jetpack cam, simply turn off scene gravity, and use moveCamera() again (with some keypress/gamepad eventListening to determine thrust directions). The only reason camera.applyGravity is not used in this playground demo... is because moveCamera is doing that FOR us. You can do camera moving and gravity work just fine... without using moveCamera() and camMesh. You can control the camera itself. BabyJS 1 Quote Link to comment Share on other sites More sharing options...
GameMonetize Posted January 17, 2017 Share Posted January 17, 2017 I beat you but your responses are always richer BabyJS 1 Quote Link to comment Share on other sites More sharing options...
BabyJS Posted January 17, 2017 Author Share Posted January 17, 2017 I'm already using gravity for the camera but i did it to be as a real life, not a constant gravity, so the camera fall every time more faster. Also i had problems to climb stairs and go over some objects so i made two things: 1.- When you hit the floor the gravity comes to 0 and if you try to jump or whatever the gravity starts to increase from 0 to Up.(instead to be always 9.8). 2.-When the player try to go up, this means the camera ellipsoid try change to a higher Y(like climb a stairs), i add some impulse(substract some gravity). With this i can add stairs of a big size and the player climb them so smoothly like if was a ramp in each step. No "earthquake" effect, without add some fake ramp mesh objects in the staris or whatever. But the problem as i said is when you move, the camera takes the Y rotation in consideration to change his position so makes you can fly if you look the sky and go forward or if you look the floor and go back. So, i need a way to using the FreeCamera avoid takes the Y.Rotation when camera moves. Also i tried toclear controls and use my own like "When W is pressed" > Camera.CamFrontX(1),etc... that avoids the Y rotation and the camera only moves in the axis but always i get weird results, i'm bad in this axis-math stuff :S . Any example? Quote Link to comment Share on other sites More sharing options...
Wingnut Posted January 17, 2017 Share Posted January 17, 2017 http://www.babylonjs-playground.com/#1GL6RR#7 Here I changed the moveCamera function a bit. Lines 62/63 ... slewX and slewZ can be thought-of as left/right throttle setting, and forward/backward throttle setting (perhaps -5 to +5 on each). These are WORLD coordinates, so it doesn't matter how the camera is aimed. (Y-rotation ignored). Down in line 77, I changed variable name to "movement" because it is not camera-forwards anymore. It is world-directions... so... I changed name. Now you can look sideways, and still go over ramp... because camera/camMesh is always going to move along WORLD +/- X, and WORLD +/- Z... or both at same time. Camera aiming direction (y-rotation) doesn't matter.... because of major changes to line 77. Hope this helps. Write back. BabyJS 1 Quote Link to comment Share on other sites More sharing options...
GameMonetize Posted January 18, 2017 Share Posted January 18, 2017 Other option: http://www.babylonjs-playground.com/#GZ1YB I changed the updatePosition a bit to void the Y component of the camera direction Wingnut and BabyJS 2 Quote Link to comment Share on other sites More sharing options...
BabyJS Posted January 18, 2017 Author Share Posted January 18, 2017 LOTS OF THANKS Deltakosh!!, worked! simple and perfect! . Also thanks Wingnut for that explanation and examples . In my case using the plugin of Babylon.JS for Construct 2 the execute javascript action is this: "this.runtime.scenes[0].getCameraByName(""camera"").cameraDirection.y = 0;" Well, other little thing fixed after some days of research. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.