godotengine / godot-proposals

Godot Improvement Proposals (GIPs)
MIT License
1.16k stars 97 forks source link

Press "F" twice to make the editor camera follow the selected node #3164

Open lentsius-bark opened 3 years ago

lentsius-bark commented 3 years ago

Describe the project you are working on

An exploration themed 3D game set in a wholesome post apocalyptic world. The player controls a ship and fishes garbage out the ocean to help nature There are paths that have cable-cars on path follows with custom animation for sway.

Describe the problem or limitation you are having in your project

The issue is present whenever there is an object which requires I want to follow the object as it is animated along the path, which can be done by holding F, but it becomes unintuitive when I want to press other keyboard shortcuts. By having the option of camera following the object, I can easily tweak its animated properties to best fit the given situation and momentary physical implications that need to translate into an animation.

Describe the feature / enhancement and how it helps to overcome the problem or limitation

If we could press "F" twice which would automatically make the editor camera follow target, we would help users with situations when an animated or simulated object leaves the camera view, giving constant visual feedback on what's going on.

At the moment the user needs to pause the animation or simulation (tool scripts) and refocus, or zoom out. Zooming out although a solution, may induce either loss of perceived visual details necessary in development for the given object or the distance may become so great that it no longer allows the user to properly assess their design.

Describe how your proposal will work, with code, pseudo-code, mock-ups, and/or diagrams

The users presses "F" twice instead of once, the camera zooms in on the target, selected node and follows it if its position changes.

Bonus: If this could be somehow linked with the feature which allows the editor camera to override the running game's one, I believe this could easily become a vital debug tool, where in-game users could tweak things that are in motion in editor, focus in on them and switch to the game instantly seeing the results, thus greatly enhancing the features usefulness. i.e.

https://user-images.githubusercontent.com/38346332/130144331-a4c2c03c-42fa-4c7f-aee5-3d48e3fa100f.mp4

If this enhancement will not be used often, can it be worked around with a few lines of script?

I believe this could be an addon indeed.

Is there a reason why this should be core and not an add-on in the asset library?

Moving the camera, focusing on objects is a core part of development that takes place in the editor at all times and becomes even more pronounced with 3D. This feature simply enhances the already existing functionality and promotes an easier way of working with objects in motion.

Calinou commented 3 years ago

That's a good idea. It's likely worth implementing in the 2D editor as well.

From a discoverability point of view, I am not sure whether this should be done by pressing F twice, or by adding another keyboard shortcut like Alt + F. (Shift + F is already used to toggle freelook in the 3D editor, and frame the selection in the 2D editor.)

lentsius-bark commented 3 years ago

Yeah! Alt + F sounds good. I've used software that had either, Unity has a double F for instance I believe.

GuyUnger commented 3 years ago

couldn't it just work by pressing F once, and the moment you pan it's released. there wouldn't be any difference in behavior when focusing on an object that doesn't move, and if you focus on a moving object you probably want it to keep the focus by default, and if you don't it's easy to get out of it by padding a little bit

lentsius-bark commented 3 years ago

couldn't it just work by pressing F once, and the moment you pan it's released. there wouldn't be any difference in behavior when focusing on an object that doesn't move, and if you focus on a moving object you probably want it to keep the focus by default, and if you don't it's easy to get out of it by padding a little bit

After a bit of thought, I don't think this would work well IMO, as a common workflow if to focus on an object an then move it right away. If the camera follow was to be automatic it would create a confusing situation where the user tries moving an object but it seems to be still or rather the entire world is moving!! đŸ˜„

Yeah a shortcut should be just fine.

GuyUnger commented 3 years ago

what if moving the object through gizmos also cancels the focus? maybe that sounds like patching up the problem but i think it could actually be intuitive

GuyUnger commented 3 years ago

If there's still a problem with that a shortcut might be necessary, but if the shortcut can be avoided it's less clutter in Godot and more people will benefit from this feature (since almost nobody ever finds these special shortcuts), plus fewer shortcuts to memorize

lentsius-bark commented 3 years ago

@GuyUnger

what if moving the object through gizmos also cancels the focus? maybe that sounds like patching up the problem but i think it could actually be intuitive

the option however, may be useful in situations where you want to have the gizmo transform to follow the camera, the issue isn't in the intuitiveness but the need no to hide anything form the user. In this approach there'd be a lot of hidden functionality.

The other implementation on theo ther hand is super straight forward, both a shortcut and a button somewhere in a menu, you toggle it and it follow the node UNTIL you either:

  1. pan (move) the camera view (SHIFT + MMB)
  2. disable the function

I understand your point of view, but I still believe the initial idea is much better from the UX pov, your idea for implementation introduces a lot hidden gotchas, which may frustrate the user if they were specifically trying to accomplish that which cancels the follow. I do believe there may be another solution, entirely different perhaps? Either way, for now I vote for the button/shortcut way. It makes sense, is there, can be found and well documented, perhaps a little hard to find but then again there are things which seem evident within Godot that I to this day still keep on stumbling upon, due to this it is my understanding that not everything can be done in a way that instantly works and is intuitive and doesn't break smooth workflow at the same time.

GuyUnger commented 3 years ago

the option however, may be useful in situations where you want to have the gizmo transform to follow the camera

can you give an example? it seems awkward to control and i can't really think of a situation where this is useful, not saying there isn't any, i just can't think of it

The other implementation on theo ther hand is super straight forward

without the extra function it could be even more straight forward, no extra buttons or shortcuts, just focus on an object and it behaves as normal, just if the object is moved by something it follows it and when it does you can cancel it with panning the camera (or moving the object by hand but you won't even need that when it's animating)

introduces a lot hidden gotchas

I think the best ux is the most minimalistic on surface while providing the most use, by covering these "gotchas" in simple ways, if there is something that really breaks it it's not possible of course, but I'd really try to go for the simpler solution before resorting to extra buttons and shortcuts, that's how an engine can stay accessible while also adding new features. this one feature might not be a big deal, but if we easily add new buttons and shortcuts for every idea the engine will eventually become real ugly and not leave much room for more complex new features

perhaps a little hard to find but then again there are things which seem evident within Godot that I to this day still keep on stumbling upon, due to this it is my understanding that not everything can be done in a way that instantly works and is intuitive and doesn't break smooth workflow at the same time.

the fact that some features can't be integrated in elegant ways doesn't mean that it shouldn't be attempted to be done with everything. Having more cool features hidden away for few people to find isn't a good thing, at least not if it can be prevented

i'm not trying to be difficult about this, and maybe my idea has some catch that makes it not work, but i just find it super important to see the engine improve without losing it's simplicity wherever that might be possible

lentsius-bark commented 3 years ago

can you give an example?

  1. You're animating a cube that falls down a hole and want to move it down, you've zoomed out enough to see the environment and you the cube as well, then tweak its rotation. Meaning that you can automatically follow it also means you don't need to manually pan the camera. Super useful.
  2. You following and animating an object on a path and at one point you notice its position could use tweaking. You've been following it for a while and got used to the workflow of the feature. Suddenly you change the position because it's needed within the animation, and the camera stops. Requiring you to move it again.

Why is it a bad idea?

  1. In general the F to focus, is used in EVERY application I can think of to focus and not follow.
  2. You want to focus on an animated object and don't expect it to follow. You play the animation and notice that the follow is on. How do you turn it off? Well now you need to find that one. Meaning that instead of hiding a cool new feature which isn't as commonly used as focus, you now have to find out how to get the expected behaviour to work.

I think the best ux is the most minimalistic on surface while providing the most use

yes. Bear in mind that the default F to focus without focus is the most widely understood and expected

we easily add new buttons and shortcuts for every idea

We're not easily adding it here, it just makes most sense till now.

Having more cool features hidden away for few people to find isn't a good thing

Having cool new features that get in the way of the standard workflow isn't a good thing.

i'm not trying to be difficult about this

Neither am I, I am honestly trying to find the best way. I've used Blender for over 7 years and Godot for over 3 now, I am certain that an automatic follow that would do things I am not expecting within a standard 3D workflow would infuriate me. I am open to the original idea not being ideal however it means that a better one needs to be found.

GuyUnger commented 3 years ago

I bet just a handful of the thousands of users might use this once or twice, and in that case it's cool but not even all that useful. therefore i would personally not be in favor of adding this if it needs an extra button. a shortcut could be fine, or better pressing F twice like your original suggestion, but a button that can just easily add confusion for people for this super rare situation seems like not a good idea to me

lentsius-bark commented 3 years ago

Very very good. I'd like to mention that "one or twice" is an understatement to it usefulness. We use both Godot and Unity in our studio and using the double F in unity is super useful in many instances in our workflows. Sure it's not as needed as fixing of the scale gizmo which is near useless at scaling already scaled objects, which would deserve a lengthy discussion or a fix but still a really cool feature to have.

A shortcut could be fine, or pressing F twice like your original suggestion, but a button that can just easily add confusion for people for this super rare situation seems like not a good idea to me

Sounds good to me! Again if there is a better idea i'm all for it, at the same time, I am far from the responsible person as I won't be implementing it.

me2beats commented 2 years ago

This would be useful. I would like to implement this as a GDScript plugin but I can't because there is no a way to set the camera translation https://github.com/godotengine/godot-proposals/issues/3287