- I have a 3d box player with attached camera. I’ve added platform character behavior to him.
- Then I’ve created a 3d platform object with platform behavior.
- Z(elevation) of the player is higher.
- After launching the scene I get a player who moves to the left instead of going to the bottom direction. Ok. I’m turning the player by 90 degrees. Now the player moves to his bottom but Z(elevation) changes the player’s direction to the left now. It’s one of the basic mechanics for many possible games but it works in a brain dead way. Right now my “elevation” is Y and the whole project should be fixed now. I hope the devs know about this issue already.
I’m no expert, but I think it has something to do with the way the platformer behavior works. I believe it applies gravity on the Y axis. So putting your platform below your player’s z axis will do nothing because it doesn’t fall along the z axis. There is a workaround to get z collisions I learned from reading the forums that I’ve did a little experimenting with, but I don’t know how to upload the file to the forum to share.
I know someone is working on a 3D platformer extension. The work around was a bit difficult to implement, and has certain limitations. Personally I’m waiting on the extension or for it to become properly integrated into the engine.
You could easily make a 3d sidescroller, but doing something like Super Mario 64 right now would be a big challenge.
It’s easy to do using WithThreeJs. But I just tested default 3d functionality. Seems like default 3d is bad right now
Not sure if this works but, try this in default 3D,
(BTW Do this in a new test project before you try it in your main project because the game might get an annurism):
Group all objects into one group called “all” and another group which has everything you want to get effected by gravity called “Dynamic objects”
First function:-
Condition:
- If Group.all at position.X()=group.dynamic_objects.X()
- If Group.all at position.Y()=group.dynamic_objects.Y
- Z.elevation.group.all() < Z.elevation.group.dynamic_objects()
Action:
Clamp the Z-elevation:
minimum value: Z.elevation.group.all()
Maximum value:
Second function:
Condition:
N/A
Action:
Subtract 9.8*TimeDelta()*TimeDelta() from Z.elevation.group.dynamic_objects()
If that works then you’re welcome. If not then sorry I couldn’t help.