-
-
Notifications
You must be signed in to change notification settings - Fork 97
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve GridMap and 3D level design workflow #10992
Comments
I'd like to share my thoughts. I've spent a good time working on a 3.X plugin (not published yet) to fix some issues and add some functionalities. However, I did some quick tests, and will consider the 4.4.dev3 version as reference for this comment. Before thinking about future improvements, I'd prefer if some current limitations/bugs were taken care of - I'll list them with a bunch of other unorganized thoughts at the end. Meanwhile:
Snapping what to what? Nodes to the GridMap's cells?
Seems unrelated to GridMap, how would this help?
I think you linked the wrong url.
This seems to happen only if Paste Selects is True.
Do you mean "rotate Selected cells around themselves, without rotating the Selection"?
I think it would be better to add the ability to create and add flipped versions into the current MeshLibrary. The linked pull request suggests changing the cell's ...constructor(?). However, this would affect all cells, and not all cells need to be flipped. Performance impacts must be measured.
Seems useful, but at the same time, not really? When is this information important within GridMap? Not all items have collision.
I thought about this in my plugin. How would you do this? Check which cell is under the cursor, then paint on the cell's coordinate + Vector3.UP? What if there's a different cell on top of the cursor? What about painting a cell below or at the sides?
Seems like a good idea. But I wonder, if you end up using a few cells to build several groups, workflow may not improve that much: you'll still need to select from several choices then paint blocks individually. Also, you may have to constantly switch between two different menus to pick what you want. Thoughts about improvements:
|
Thank you for this fantastic feedback! I will try to digest your suggestions and edit my list of improvements accordingly later this week. For some of my ideas, like "adding tile blocks" I will be making related proposals with pictures, so that it is easier to understand them. Yes I intend to make PRs ! I am rather optimistic that a lot of trivial or uncontroversial changes can be made in combination to make the user experience better. Let's see how it goes. |
As seen above, the Gridmap Editor bottom panel was officially merged yesterday, which opens the door to a lot of improvements to the gridmap! However, I would like to open a discussion on the current shortcuts. I wonder if it would work better if the action tools are in the second rows of keys. Something like:
This way is it is very easy to use the fill tool (index finger moving), while juggling between tool mode (e.g. selection and pick). |
@Hiiamwilliam I started to review your questions and suggestions. Here for the questions.
It would be to snap Node3D. The current "snap tool" simply moves Node3D by 1 units. If a Node3D is at location (0.2, 0, 0), and you move it up on the X axis, it will be moved to (1.2, 0, 0). You can't snap Node3Ds to the 3D editor's grid or to a Gridmap's grid at the moment.
It becomes useful when the Snap tool can actually snap Node3Ds to the 3D Editor's grid.
Yes.
Here I am speaking about placing a mesh on the Gridmap. At the moment, we can rotate it, and I will add the ability to flip it. However, if you find that you use that variation a lot, the template/tile block feature I suggest elsewhere would do what you need (adding it as a "tile block"/"template" in the Gridmap palette).
yes pretty much how you say. The current code is already checking which cell is under the cursor, so it should be easy to implement. I think it will already work pretty well with just adding on top of non-empty cubes, but if there is demand for it, we could detect which of the 6 faces of the cube the cursor is hovering. It would be more complicated to implement.
Let's say you build for instance a "healing shrine" location using walls, floor tiles, a statue and some curtains. That's something that will be re-used many times in your level. You would select it and save it as a template (or tile block). This template will then appear in the Gridmap's palette, as any other meshes. You won't need to switch between different menus, you can just paint it as a normal. That feature should not be too difficult to implement as the Cut tools is already doing most of it! Hope that helps. I will answer to your feature/fix suggestions in a second message. |
Hats off to @Nodragem for the big improvements on the gridmap usability! Here are other suggestions that came to mind when using the new interface:
On the subject of broader usability, I think GridMaps should take inspiration from the new TileMapLayers. |
Sometimes, I wonder if the arrow keys should be used to navigate the cursor in the 3D world instead, with Space placing the item on the grid at the current position. To select GridMap items, you'd use the 1-9 home row keys to enter the GridMap item ID (which would have to be shown clearly on each item). Combine this with the numpad-based camera controls and you won't have to touch the mouse quite as often as before. This provides a workflow very similar to the Trackmania map editor, which has historically been very effective to use in a keyboard-only fashion for me. |
I definitely think that the 1-9 keys could be use to select Gridmap items. But for it to work well, we would need a favourite bar, where the user can place 9 items they will be using a lot for the level they are currently making. That bar could be a 9-column x 1-row grid at just on top of the Gridmap panel. The user would drag-and-drop items from the Gridmap's palette into that favourite bar. Or, we could have 1-9 refering the first 9 items of the palette and we would have a system to reoder and pin items in the palette. Probably worth its own proposal for further discussion. Please link the proposal to this one if you create one! |
Adding to the list is two PRs that implement rendering/visual layers in a different way: |
I start to think that most of the tools may need parameters, so I opened a proposal to add a tool settings panel in the Gridmap Editor: |
Great news for people who make 3D levels in Godot: This was in my wishlist/todo list (in the first post). Combined with the default drag-and-drog behaviour (godotengine/godot#91874), it makes building levels much easier! |
Amazing work so far! I have 2 feature requests I'd like to add to the proposal:
|
This would require each MeshLibrary item to declare the space it takes on the GridMap (with a Vector3i property that represents the number of cells on each axis). For more fancy configurations, you'd want the region occupied by the item to have an arbitrary shape, not just cuboids, but this would be a lot more complex to define and implement. |
Do you mean when you use the mesh picker tool? |
A feature that I really would like is to be able to use different collision layers per shape in the same tile. |
When raycasting I get a shaped id, but not the cell position. I want the cell position that shape belongs to. Sometimes a shape spans multiple cells. So when raycasting, going through where on the gridmap the raycast landed does not guarantee the shape's cell position. |
Describe the project you are working on
I have been working on a Top-down Action/Adventure starter kit. It inspired all the ideas I've got to improve the level design workflow in Godot. It is open source and available here: https://github.com/Nodragem/top-down-action-adventure-starter-kit
Describe the problem or limitation you are having in your project
There are many little things that can be done to make the on-grid level design experience (e.g. gridmap) greater and I will be listing them here, as a working plan for future contributions.
I am very happy to get feedback and help in shaping this plan for better on-grid level design tools and implementing it!
Describe the feature / enhancement and how it helps to overcome the problem or limitation
Outside Gridmap
add as sibling
Change default parenting behavior when drag-and-dropping to 2d and 3d editor godot#91874Gridmap Small Features (but impactful)
paste selects
to a better nameGridmap Small Fixes:
Mesh Library and Gridmap Palette
Brush improvements
Gridmap Bigger Improvements:
Navigation Mesh:
Describe how your proposal will work, with code, pseudo-code, mock-ups, and/or diagrams
This proposal will be divided into smaller proposal and PR. It is here to give a big picture.
If this enhancement will not be used often, can it be worked around with a few lines of script?
No.
Is there a reason why this should be core and not an add-on in the asset library?
Gridmap is already core.
The text was updated successfully, but these errors were encountered: