playMaker

Author Topic: Controller Simple Move: How can i finesse this?  (Read 2849 times)

Red

  • Hero Member
  • *****
  • Posts: 563
Controller Simple Move: How can i finesse this?
« on: August 01, 2013, 07:00:27 PM »
So, for the longest i've been using the simple move controller for most of the third-person stuffs but i've been noticing that there seems to be a bit of a hitch to using it.

The horizontal and vertical movement is fine... but when you go diagonally it seems to go a bit faster which is making the animation of my characters fall into that "not synced up" right look... yes, i am aware that if i drive the locomotion from the animation itself then that'd resolve that but to be honest that would actually be more problematic since the infrastructure i have set up is specific in how fast the characters need to move (and i'm not the greatest at animation so i would like to avoid any issues with that.)

Has anyone had any ways to address this "diagonal movement is a little faster" with the simple move controller? I would think that it could be resolved if i could set up a system to detect when the player is pressing diagonals and tone back the animation but that would seem to be very fiddly work and probably not resolve the issue very well.

So, tl;dr - Controller simple move, diagonal a little faster than dictated, looking for a solution or workaround that isn't persnickety and/or in need of massive fine-tuning if at all possible.

Red

  • Hero Member
  • *****
  • Posts: 563
Re: Controller Simple Move: How can i finesse this?
« Reply #1 on: August 01, 2013, 07:05:38 PM »
One method i've tried would be to take the multiplier and alter it when the X/Y returns a pure diagonal value such as [1,1],[1,-1],[-1,1],[-1,-1] however this would need specific fine tuning for each character class i have in mind (that's the main crux... I have to juggle this between close to 9 character classes so finding that "sweet spot" would be tricky.) Also, this leads to a lot of overhead since it's only really looking for a value specifically such as "if x is greater than .8" or something like that which though okay for keyboard control, kinda makes this inapplicable for an analog stick (i'm working on trying to make a standard console controller work with this so that players if they want to can use a console controller like a PS3 or XBox joypad... or a third-party one but i only have a 10+yr old logitech wingman that's missing some buttons so I can't reliably use that to test with.)

jeanfabre

  • Administrator
  • Hero Member
  • *****
  • Posts: 15500
  • Official Playmaker Support
Re: Controller Simple Move: How can i finesse this?
« Reply #2 on: August 02, 2013, 09:01:18 AM »
Hi,

 the likely solution is to clamp the vector containing the input to 1, as you go diagonal, both values are 1, which results in the final magnitude being higher then 1, and thus you go faster.

bye,

 Jean

Red

  • Hero Member
  • *****
  • Posts: 563
Re: Controller Simple Move: How can i finesse this?
« Reply #3 on: August 10, 2013, 08:55:09 AM »
Okay, I just tried that with the "Vector3 Clamp Magnitude" function set to clamp it to 1 but it's still running faster diagonally...

any other suggestions?

EDIT: I'm sure I could work something up that will detect when the diagonals are active and clamping that down a bit to something a little more manageable but that would only really work for keyboards or digital-style input... so, when I end up going to getting the analog functionality (i'm hoping to put in standard game-controller support for controllers like the PS3 or the XBox360 eventually and if this can be nailed down before then then it'd save me a whole host of headaches later on down the road.)
« Last Edit: August 10, 2013, 08:57:49 AM by Red »

jeanfabre

  • Administrator
  • Hero Member
  • *****
  • Posts: 15500
  • Official Playmaker Support
Re: Controller Simple Move: How can i finesse this?
« Reply #4 on: August 12, 2013, 05:04:46 AM »
Hi,

 I would keep working on this clamp, as this is indeed the best way, and must work, UNLESS you are missing one thing from the controller, where you think you input values one way, but instead it does it on its own ( like it checks for the input itself, instead of you passing the values manually)

bye,

 Jean