From e86f3ab163f47aad159474082df61fedfca3803c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Vivet?= Date: Tue, 27 Jan 2026 12:36:33 +0100 Subject: [PATCH 1/2] collision mesh on ramps --- .../platformer-3d-wipeout.json | 424 +++++++++++++++--- 1 file changed, 356 insertions(+), 68 deletions(-) diff --git a/examples/platformer-3d-wipeout/platformer-3d-wipeout.json b/examples/platformer-3d-wipeout/platformer-3d-wipeout.json index 6446b73a8..19f859152 100644 --- a/examples/platformer-3d-wipeout/platformer-3d-wipeout.json +++ b/examples/platformer-3d-wipeout/platformer-3d-wipeout.json @@ -1,9 +1,9 @@ { "firstLayout": "Game Scene", "gdVersion": { - "build": 248, + "build": 252, "major": 5, - "minor": 5, + "minor": 6, "revision": 0 }, "properties": { @@ -376,7 +376,7 @@ "gridColor": 10401023, "gridAlpha": 0.8, "snap": false, - "zoomFactor": 0.18923010380623995, + "zoomFactor": 0.5843784410741274, "windowMask": false, "selectedLayer": "Base meshes" }, @@ -2515,24 +2515,6 @@ "stringProperties": [], "initialVariables": [] }, - { - "angle": 0, - "customSize": true, - "depth": 8, - "height": 318, - "layer": "", - "name": "Box_Collider", - "persistentUuid": "ed5515d9-d409-41e6-a8d5-6a63b2416217", - "rotationY": 338, - "width": 316, - "x": 104, - "y": 2079, - "z": 122, - "zOrder": 0, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": true, @@ -2551,42 +2533,6 @@ "stringProperties": [], "initialVariables": [] }, - { - "angle": 0, - "customSize": true, - "depth": 8, - "height": 646, - "layer": "", - "name": "Box_Collider", - "persistentUuid": "1cb0048e-6758-4ddc-8b43-c74726b3a897", - "rotationY": 313, - "width": 109, - "x": 2006, - "y": 2398, - "z": 363, - "zOrder": 0, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "depth": 8, - "height": 646, - "layer": "", - "name": "Box_Collider", - "persistentUuid": "ec24dacf-8544-4361-80c3-d8f0fa23e111", - "rotationY": 47, - "width": 109, - "x": 1597, - "y": 2398, - "z": 363, - "zOrder": 0, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": true, @@ -3250,10 +3196,10 @@ "name": "Physics3D", "type": "Physics3D::Physics3DBehavior", "object3D": "Object3D", - "bodyType": "Kinematic", + "bodyType": "Static", "bullet": false, "fixedRotation": false, - "shape": "Box", + "shape": "Mesh", "shapeOrientation": "Z", "shapeDimensionA": 0, "shapeDimensionB": 0, @@ -3307,7 +3253,7 @@ "bodyType": "Static", "bullet": false, "fixedRotation": false, - "shape": "Capsule", + "shape": "Mesh", "shapeOrientation": "Z", "shapeDimensionA": 0, "shapeDimensionB": 0, @@ -3407,7 +3353,37 @@ "type": "Scene3D::Model3DObject", "variables": [], "effects": [], - "behaviors": [], + "behaviors": [ + { + "name": "Physics3D", + "type": "Physics3D::Physics3DBehavior", + "object3D": "Object3D", + "bodyType": "Static", + "bullet": false, + "fixedRotation": false, + "shape": "Mesh", + "meshShapeResourceName": "", + "shapeOrientation": "Z", + "shapeDimensionA": 0, + "shapeDimensionB": 0, + "shapeDimensionC": 0, + "shapeOffsetX": 0, + "shapeOffsetY": 0, + "shapeOffsetZ": 0, + "massCenterOffsetX": 0, + "massCenterOffsetY": 0, + "massCenterOffsetZ": 0, + "massOverride": 0, + "density": 1, + "friction": 0.3, + "restitution": 0.1, + "linearDamping": 0.1, + "angularDamping": 0.1, + "gravityScale": 1, + "layers": 17, + "masks": 17 + } + ], "content": { "centerLocation": "ObjectCenter", "crossfadeDuration": 0.1, @@ -3799,7 +3775,37 @@ "type": "Scene3D::Model3DObject", "variables": [], "effects": [], - "behaviors": [], + "behaviors": [ + { + "name": "Physics3D", + "type": "Physics3D::Physics3DBehavior", + "object3D": "Object3D", + "bodyType": "Static", + "bullet": false, + "fixedRotation": false, + "shape": "Mesh", + "meshShapeResourceName": "", + "shapeOrientation": "Z", + "shapeDimensionA": 0, + "shapeDimensionB": 0, + "shapeDimensionC": 0, + "shapeOffsetX": 0, + "shapeOffsetY": 0, + "shapeOffsetZ": 0, + "massCenterOffsetX": 0, + "massCenterOffsetY": 0, + "massCenterOffsetZ": 0, + "massOverride": 0, + "density": 1, + "friction": 0.3, + "restitution": 0.1, + "linearDamping": 0.1, + "angularDamping": 0.1, + "gravityScale": 1, + "layers": 17, + "masks": 17 + } + ], "content": { "centerLocation": "ObjectCenter", "crossfadeDuration": 0.1, @@ -8068,7 +8074,99 @@ "name": "ForwardZ" } ], - "sharedPropertyDescriptors": [] + "propertiesFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "propertyName": "Object3D" + }, + { + "folderName": "Catch-up speed", + "children": [ + { + "propertyName": "RotationHalfwayDuration" + }, + { + "propertyName": "ElevationHalfwayDuration" + }, + { + "propertyName": "TranslationZHalfwayDuration" + } + ] + }, + { + "folderName": "Position", + "children": [ + { + "propertyName": "Distance" + }, + { + "propertyName": "OffsetX" + }, + { + "propertyName": "OffsetY" + }, + { + "propertyName": "OffsetZ" + }, + { + "propertyName": "RotationAngleOffset" + }, + { + "propertyName": "ElevationAngleOffset" + }, + { + "propertyName": "FollowFreeAreaZMax" + }, + { + "propertyName": "FollowFreeAreaZMin" + } + ] + }, + { + "propertyName": "RotationLogSpeed" + }, + { + "propertyName": "ElevationLogSpeed" + }, + { + "propertyName": "TranslationZLogSpeed" + }, + { + "propertyName": "IsCalledManually" + }, + { + "propertyName": "CameraZ" + }, + { + "propertyName": "HasJustBeenCreated" + }, + { + "propertyName": "IsRotatingWithObject" + }, + { + "propertyName": "IsElevatingWithObject" + }, + { + "propertyName": "RotationMode" + }, + { + "propertyName": "TargetedRotationAngle" + }, + { + "propertyName": "TargetedElevationAngle" + }, + { + "propertyName": "ForwardX" + }, + { + "propertyName": "ForwardY" + }, + { + "propertyName": "ForwardZ" + } + ] + } } ], "eventsBasedObjects": [] @@ -11234,6 +11332,106 @@ "name": "TargetedRotationSpeed" } ], + "propertiesFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "folderName": "Rotation", + "children": [ + { + "propertyName": "RotationSpeedMax" + }, + { + "propertyName": "RotationAcceleration" + }, + { + "propertyName": "RotationDeceleration" + } + ] + }, + { + "propertyName": "TranslationSpeedMax" + }, + { + "propertyName": "TranslationAcceleration" + }, + { + "propertyName": "TranslationDeceleration" + }, + { + "propertyName": "CurrentRotationSpeed" + }, + { + "propertyName": "PreviousRotationSpeed" + }, + { + "propertyName": "CurrentForwardSpeed" + }, + { + "propertyName": "CurrentSidewaysSpeed" + }, + { + "propertyName": "PreviousForwardSpeed" + }, + { + "propertyName": "PreviousSidewaysSpeed" + }, + { + "propertyName": "HasPressedTurnLeft" + }, + { + "propertyName": "HasPressedTurnRight" + }, + { + "propertyName": "HasPressedTurnLeftLast" + }, + { + "propertyName": "HadPressedTurnLeft" + }, + { + "propertyName": "HadPressedTurnRight" + }, + { + "propertyName": "HasPressedMoveForward" + }, + { + "propertyName": "HasPressedMoveBackward" + }, + { + "propertyName": "HadPressedMoveForward" + }, + { + "propertyName": "HadPressedMoveBackward" + }, + { + "propertyName": "HasPressedMoveBackwardLast" + }, + { + "propertyName": "HasPressedMoveLeft" + }, + { + "propertyName": "HasPressedMoveRight" + }, + { + "propertyName": "HadPressedMoveLeft" + }, + { + "propertyName": "HadPressedMoveRight" + }, + { + "propertyName": "HasPressedMoveLeftLast" + }, + { + "propertyName": "TargetedForwardSpeed" + }, + { + "propertyName": "TargetedSidewaysSpeed" + }, + { + "propertyName": "TargetedRotationSpeed" + } + ] + }, "sharedPropertyDescriptors": [ { "value": "0", @@ -11248,7 +11446,18 @@ "label": "", "name": "Sin" } - ] + ], + "sharedPropertiesFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "propertyName": "Cos" + }, + { + "propertyName": "Sin" + } + ] + } } ], "eventsBasedObjects": [] @@ -12722,7 +12931,32 @@ "name": "ShouldLock" } ], - "sharedPropertyDescriptors": [] + "propertiesFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "propertyName": "Object3D" + }, + { + "propertyName": "HorizontalSpeed" + }, + { + "propertyName": "VerticalSpeed" + }, + { + "propertyName": "VerticalAngleMin" + }, + { + "propertyName": "VerticalAngleMax" + }, + { + "propertyName": "OffsetZ" + }, + { + "propertyName": "ShouldLock" + } + ] + } } ], "eventsBasedObjects": [] @@ -13840,7 +14074,9 @@ } ], "propertyDescriptors": [], - "sharedPropertyDescriptors": [] + "propertiesFolderStructure": { + "folderName": "__ROOT" + } } ], "eventsBasedObjects": [ @@ -14022,6 +14258,9 @@ } ], "propertyDescriptors": [], + "propertiesFolderStructure": { + "folderName": "__ROOT" + }, "variants": [] } ] @@ -14741,7 +14980,23 @@ "name": "WasChecked" } ], - "sharedPropertyDescriptors": [] + "propertiesFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "propertyName": "ButtonFSM" + }, + { + "propertyName": "IsChecked" + }, + { + "propertyName": "PreviousIsChecked" + }, + { + "propertyName": "WasChecked" + } + ] + } }, { "description": "The finite state machine used internally by the button object.", @@ -15908,7 +16163,29 @@ "name": "Index" } ], - "sharedPropertyDescriptors": [] + "propertiesFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "propertyName": "ShouldCheckHovering" + }, + { + "propertyName": "State" + }, + { + "propertyName": "TouchId" + }, + { + "propertyName": "TouchIsInside" + }, + { + "propertyName": "MouseIsInside" + }, + { + "propertyName": "Index" + } + ] + } } ], "eventsBasedObjects": [ @@ -17118,6 +17395,17 @@ "name": "PreviousIsChecked" } ], + "propertiesFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "propertyName": "IsChecked" + }, + { + "propertyName": "PreviousIsChecked" + } + ] + }, "variants": [ { "areaMaxX": 143, From ced25f2332a51226bcc99716822018f9be338ed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Vivet?= Date: Tue, 27 Jan 2026 12:45:15 +0100 Subject: [PATCH 2/2] Fix asset --- .../Base 1 Ramp Low To Mid White Blue.glb | Bin 0 -> 10492 bytes .../platformer-3d-wipeout.json | 166 +++++++++--------- 2 files changed, 83 insertions(+), 83 deletions(-) create mode 100644 examples/platformer-3d-wipeout/assets/models/Base 1 Ramp Low To Mid White Blue.glb diff --git a/examples/platformer-3d-wipeout/assets/models/Base 1 Ramp Low To Mid White Blue.glb b/examples/platformer-3d-wipeout/assets/models/Base 1 Ramp Low To Mid White Blue.glb new file mode 100644 index 0000000000000000000000000000000000000000..85c7998f196d32c4f7a1ec5a8845b02fa94305e7 GIT binary patch literal 10492 zcmb7J34D~*wZFlzSay(2MZ&m%8bW5DNto|WSi&M95LQJ9S%xH#jmZWHNrr?-KwFlA z>_LlEKo-TS)H3s>1?pbudu`SB)!L`6v{i7SJ`{oX|KFJjUqGz#{m#AT-0$48pEF@5 zuW&|c2O-4Q!-aUeix88hr%$OdWtElr%1uc%raWJ<&!1IZ;x{Fk?#uU=6ql66<>5-) z=t5s{uFoGgab$X2r8U8xU`;f|n<{<&vVxLgFk2E5O||hR-_mklF^|e-micl`Npns2 zO~}YB$}0Ey3$hB!GRsPRITeLje$%{oQ&|p_nUWGCSQ)r$OvPD6I5SOG@8V6xCAmJn zNSs%T8&RspROBnmS63taqqE9a^Mt%?_K{g&=*G zqwgLxi_Mv6cPA!V>}Hq4Zgn|pRhCf~s$kkGX-q}7FTrBA(0+eGQ9*e@WrQKCyxd=q zT~SW5#xym3`otL%)2FDanlWz9nDq3Fv6+dcBy+rJN_s|G%4AcL1%W9j&MnB{73-Cn z!X0MtdID|nCZj<66@d<;K&MflxmHztRt|KPmH62MD87n?3w{1s1->d}Wll*^X-ToK zxO~R4QZ$X-Y;nY!a!M+S(aL7061Nohtf&L4+v;#Soo2Jm<#5H@65LL=!|HTcEH10n zVz<;B-HWoqDR8>ns92=PWp-L!RtDVeNHp85ZkrRkl__u{!pKXa z%WZaAtPZO&1x}aM?c@!!+hK9J8E%`^Vng(iR~vF-clt&oI(hDNF|AnLc9+{_v;BuO zpd9~`6W^8v%JK1l zu1AJ=lD=@E`hcUfEPoz9>#Q~e@=8fwbJ=V&!!_gOu(yDW)` zn4ewZgcv<>is;hl_kMM`UZ&3Wdt2iDtusf~dNY9U1wI@22fh5Qmm2)u8$>{Uaur_E z&F|g)mk;E+d+J+>#|YtFux&}}t{wI2oH);KPdO_`o9Yzay~laE$z0P8AL*%5{N$;b zU*$d4cvhyqzr1z9pepab4tybFS5&vdZ~p5t@0ZQzWY>~qt=GdTGym*GNgJNnUE`(R zt8v;!p19X4mEMvi7i8f_m92e0uU2}eJ=q?gwy{pxNq)+t@ASoplZXCN*UXu<%9p6j zrZ3MZUnoC{??bG1LeA0mmUx%Jo{N_+x8XcLU0Uy*3z>rP8+fj6Ure@T_0D~w8PzqEqQ1| z6Y^DnxKY<4$~l*}O`Y>@YG}JR8MRFt7M$3j z?)C)F2Ke$ha!q_cd_0cWO8CAV_7ms%XOOc8u_8VKww*^_-h^!$^z!@`$R7*&`w&9` z+t$IhJjC!t_?QGAi;-*ckAyFjITm&X5UZ&CM)=-{yi?9I@bOLL^jX;HM67;>`uP;` zq&?)}-M_&{+Q9P*h(G208*zRdagN@d4_pXAhb^L zu)n_ibk#LDdB{H$`DL%&w|t!}LVnp_w@zOzGa~&P#W^dwS3NAdA=gHnb6{7m1|^3$ zbv=r_bB6Gob{cWcsLelGsdRBhQGQ3vDDu#rF{lCBOq_CzIOWqX@=y+K9*=sU%?+K_ zD>+7-^I<;ZynxuUABlg6Iw8)v&2#oX&#RCZ&IjTjAul|C7rMy9nJ^Bzjz?y~a_E|i zys-B>BPQ9X4ay|{R@4&l&k+a8VgFJl&)KJxvlBJOe(w+8DTh2;5i9DV4ZIt*ndh{P zch@6sQ5$%7FY1c*{Hx3+RsXE{*A6$g)g(WUSXZpu;yn+kI%nYsJHb9_@<{kOi~sOq1!x_H1tN+#u0cW6{N NS%^E)0>7lk7KK?+Xs(%XL-(fMIO#8 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 j4uFoR*lzes>juD$n4mrJcUM