Intuitive control scheme

So currently I’m making a small thing which basically consists of a free flying camera and a world with a bunch of objects that you’ll be able to pick up, move, place and otherwise manipulate in various ways
at the moment the only functionality there is, is picking up and object, moving it, rotating it and placing it back down and of cause camera controls

but even now I’m already starting to think that the current control setup will be too much of an unintuitive mess and would require too much retraining of the player for it to be enjoyable

so any ideas/feedback to make things about more sensible and intuitive would be most welcome

Currently the control setup looks like this:

WASD = Move camera (cam’s local axis)
Right mouse (Hold) = Mouse look
Right mouse (Hold) + Scroll Wheel = Move camera on the Y axis
Double click object (Left) = Pick up object

While holding object:
Ctrl = Reset object rotation to 0,0,0
Scroll Wheel = Raise/Lower object on Y
Left Click = Drop object
Left mouse (Hold) = Rotate object around Y with mouse

While holding left mouse:

  • Alt = Rotate X and Y
  • Alt + Scroll Wheel = Rotate Z (this part is rubbish and definitely needs to be changed or people will develop carpel tunnel)
  • Shift = Incremental rotate of 5 degrees
    (so to rotate in 5 degree increments on Z it’s pick up object, hold left mouse + hold alt + shift and use scroll wheel)

Really? Double click to pick up and single-click to drop? I see a lot of people dropping projects…

Also I don’t really agree with using scroll wheel for Y axis.

I don’t think there is a real benefit from this thread without for info, but I’d say:

the scroll wheel “inside” 3D space is famous for it’s strong and sophisticated ability to ZOOM in and out.
if there is no zooming involved, the scroll wheel shouldn’t be used at all IMO.

of course …for scrolling through things, but only vertical :slight_smile:

What are you even on about? if you’re suggesting I won’t be able to pull off the code to distinguish between single and double click without them over lapping then don’t bother as that part is already working, the reason for this thread is to find a way to jam all the controls in there in a way that players would feel comfortable with - without having to brainwash them into an entirely new and unfamiliar control scheme

what sort of info?

yeah zoom would make more sense for the scroll wheel, though it’s completely free flying camera so no real need for a zoom, unless I changed it to something like wasd for up/down, left/right and then ‘zoom’ to go forwards and backwards - might have to see if that’ll work

I don’t see any reason why a scroll wheel should be completely ignored just because it isn’t used for something you expect it to be used for. That seems short-sighted, and it ignores potential. Zoom has no place here, so why not use the control for something else?

I’m in favor of vertical movement being on an axis-like control, rather than on two buttons. It’s always bothered me that vertical movement in this kind of control scheme is the only game axis that isn’t on a control axis; it’s disruptive (see Halo’s Forge mode). This only makes sense if you’re actually flying a helicopter, not moving an abstract object freely. It’s worth pointing out that it doesn’t take up a crucial finger to itself either, like using buttons would do. I don’t see why you should need to hold the right mouse button to use it though; I think it should just be scroll wheel.

However, I don’t think it’s wise to disable vertical movement when you’re holding an object. Don’t change the primary movement controls just because you’re holding something, it will be hard to remember. Instead, why not remove that feature altogether? If you can move vertically, why would you need to move the object vertically relative to you?

For rotating the object, maybe you could try this:

-Hold left mouse + move mouse: Rotate held object about y-axis
-Hold left mouse + hold ‘z’ + move mouse: Rotate held object about z-axis
-Hold left mouse + hold ‘x’ + move mouse: Rotate held object about x-axis

This eliminates all ‘Mouse button + scroll wheel’ situations.

I do like having shift be an incremental control. Maybe have the increment value be configurable?

You are now two cents richer.

it’ll likely be used to control a lot of other things in other contexts like rotating a standing object around Y without having to pick it up but for the context of moving the camera I’ve found it to be too slow and awkward for the up and down movement though it could quite possibly work for a forward/backwards “zoom” movement

well the held object is actually moving based on the cursor as oppose to the camera and is sitting a set height above the ground/other objects below it hence why I wanted a way to raise/lower it without having to try and wrangle the cam into the right position, though to be honest if the cam’s vertical movement was more fluid it wouldn’t be quite as cruitial anymore I suppose

this actually makes sense, I just always get confused about rotation and axis’ (rotation around Y means the ‘circle’ is sitting on the X plane)

could quite possibly be a thing, might do a sort of ‘brush size’ toolbar for the various tools and controls

yay just 99,999,998 more and i’ll be a millionaire :stuck_out_tongue:

Just wanted to point out that planes are made of two dimensions. In this case, the “circle” for the y-rotation lies on the XZ-plane. This is why we use the axis that doesn’t lie on that plane to specify rotation. Y-rotation happens around the y-axis. The more you know!

well sure if you’re gonna use logic, though that doesn’t make it any less confusing especially not when over the years I’ve used quite a few different 3d related programs that can’t ever seem to agree on which way is up and which way is Z - especially when exporting models for use else where, usually end up having to go back and rotate them 90 or 180 degrees on at least one axis

Right. I’m familiar with that issue… though that doesn’t change the definition of rotation about an axis, since it’s a mathematics concept. It sucks that depending on which software is in question, “up” can be y, z, or even x, but the rotation still references a defined axis, either world or local, for rotating around.