+2 votes

My game has three types of tiles with colliders: pits/flat obstacles, half-height obstacles, and full-height obstacles. The bullets shot by the character are supposed to go over the half-height obstacles, unless he shot fired them while crouching. I've implemented this by having three separate tilemaps. One for ground and pits (with collision layer 1), one for everything that protrudes over the ground (CL 1 & 2), and a hidden one which repeats all the full-height tiles (CL 1, 2, & 3).

Basically, layer 1 is for player collision and the other two are for two bullet heights. When it comes to collision detection, it works like a charm. But I don't know how to make the layer-3 bullets be drawn over the low obstacles without breaking the Y-sorting.


Any ideas?

in Engine by (17 points)

1 Answer

+1 vote
Best answer

Use the Z coordinate under 'Node2D > Z'.

by (1,119 points)
selected by

Which Z? If I set the bullet's Z to 1, it doesn't get occluded by the tall block (and I want it to). Changing Z's of the tile sprites does nothing.
enter image description here

Change your testBullet's Z to 1 and your HighTiles's Z to 2 (not the individual sprites, the actual TileMap node)

Then I get this monstrosity:
enter image description here

Unless I hide the HighTiles or set the LowTiles' Z to 2 too. But that brings me back to square one.

I'm pretty sure that would be solved by an YSort node. Create it and put both LowTiles and HighTiles nodes inside it.

No, it would mess things up even more. But this should work: keep all Zs at the default 0, but when a bullet flies over a low tile, its Z temporarily changes to 1. Thanks!

Welcome to Godot Engine Q&A, where you can ask questions and receive answers from other members of the community.

Please make sure to read Frequently asked questions and How to use this Q&A? before posting your first questions.
Social login is currently unavailable. If you've previously logged in with a Facebook or GitHub account, use the I forgot my password link in the login box to set a password for your account. If you still can't access your account, send an email to [email protected] with your username.