Search Unity

[RELEASED] Easy Character Movement 2

Discussion in 'Assets and Asset Store' started by Krull, May 5, 2021.

  1. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    As I previously commented this is caused due not canceling the vertical velocity on platform landing, I will add the fix to the next update.

    In the meantime, those who want to implement the fix, please add the following lines to the CharacterMovement PerformGroundDetection method (line 1595)

    Code (csharp):
    1.  
    2. // On walkable ground, apply ground constrain (aka: snap to ground)
    3.  
    4. bool hitWalkableGround = _groundHitResult.hitWalkableGround;
    5. if (hitWalkableGround)
    6.     _probingPosition = _groundHitResult.position;
    7.  
    8. // FIX_BEGIN: Cancel vertical velocity on landing
    9.  
    10. if (!wasOnWalkableGround && isOnWalkableGround)
    11. {
    12.     Vector3 characterUp = _probingRotation * Vector3.up;
    13.  
    14.     velocity = velocity.projectedOnPlane(characterUp);
    15.     velocity = velocity.tangentTo(groundHit.normal, characterUp);
    16. }
    17.  
    18. // FIX_END
    19.  
    20. // If standing on a dynamic rigidbody, apply downwards force (delegated to controller)
    21.  
    22. if (hitWalkableGround)
    23. {
    24.     Rigidbody otherRigidbody = _groundHitResult.rigidbody;
    25.     if (otherRigidbody && !otherRigidbody.isKinematic)
    26.         _callbackTarget.OnApplyStandingDownwardForce(otherRigidbody);
    27. }
    28.  
    Regards,
    Krull
     
    ILJI likes this.
  2. ILJI

    ILJI

    Joined:
    Nov 1, 2016
    Posts:
    6
    Thanks for the quick fix!
    Tested it and now it works as expected.
     
  3. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Awesome, glad I could help!
     
  4. Sapien_

    Sapien_

    Joined:
    Mar 5, 2018
    Posts:
    102
    Can this be used with dotween for moving platform in stead of the moving/rotating platform script?
     
  5. JohnnyGo-Time

    JohnnyGo-Time

    Joined:
    Aug 8, 2021
    Posts:
    17
    Hello! I'm new to Unity but comfortable in C#.
    I am following the steps in the quick start, but can't figure out where my input events are going in BaseCharacterController...none of my breakpoints there get hit.
    I recorded a quick clip here, could you pls check it out?
     
  6. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hi @Sapien_

    Mmm, honestly not really familiar with dotween, however as long as it provides an option to get its eased values it should work, pretty much like the included platform examples. However you will need to create a script for your platform and use its OnMove method to update its position / rotation using the tween ease functions (like included example).

    The reason for this is because internally this PlatformMovement component computes the platform velocity and angular velocity from your given new position / rotation so the Character can access the most up to date values to move in sync with the platform.

    Regards,
    Krull
     
  7. mookfasa

    mookfasa

    Joined:
    Dec 21, 2016
    Posts:
    46
    @Krull

    I am trying to make the character jump when moving forward. Is there a way to to the jump fire when movement.x or movement.y is greater than 0. Once landed I want it to jump again. I would like to have to be separate from the jump as well so could jump i you wanted to. I tired to use the launch character and it wasn't working correctly.
     
  8. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hello @JohnnyGo-Time,

    I reviewed your video and noticed a couple of issues, first make sure you remove your attached capsule model collider, as this will interfere with the Character's own capsule collider.

    About the break points, from Visual Studio, please make sure to press the Attach to Unity button (top toolbar) so visual studio 'connects' with Unity, otherwise the breakpoints won't trigger

    About the input, yes you are correct, it is handled in the HandleInput method.

    Cheers,
    Krull
     
  9. Sapien_

    Sapien_

    Joined:
    Mar 5, 2018
    Posts:
    102
    Thanks for the reply. It seems to work on ECM 1 thank you.

    I sent you an email but I may as well post it here I guess.

    I am working on a 3D platformer and had my own Controller using the character controller component. However due to complications with the character controller component, I have been trying out your ECM asset.

    Was wondering how I access where the jump action happens. I wish to create a wall slide and wall jump.
    I would also like to know where it accesses inputs. I have a script that deals with inputs, so that I can disable and do auto control.

    thanks again
     
  10. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hi @mookfasa,

    For a 'manual' jump, eg not tied into the jump logic, you can use the LaunchCharacter function or directly modify its velocity (since its an impulse), however please make sure you pause the ground constraint otherwise the character will be pulled back to.

    For example:

    Code (csharp):
    1.  
    2. protected override void HandleInput()
    3. {
    4.     base.HandleInput();
    5.  
    6.     if (UnityEngine.Input.GetKeyDown(UnityEngine.KeyCode.R) && IsWalking())
    7.     {
    8.         PauseGroundConstraint();
    9.  
    10.         var jumpImpulse = 8.0f;
    11.  
    12.         LaunchCharacter(GetUpVector() * jumpImpulse, true); // characterMovement.velocity = GetUpVector() * jumpImpulse;
    13.      
    14.     }
    15. }
    16.  
    Regards,
    Krull
     
  11. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    For a wall grab and wall jump, you can check the included (ECM) Walkthrough example # 10 - Wall Grab and Wall Jump, it definitely should help you to get started with.

    The idea while working with ECM (same for ECM2) is to extend one of the included 'base' controllers creating a custom controller, this way you will inherit all its default functionality while at same time you can override its methods so you can tailor fit it to match your game needs. Additionally this will keep a clean separation between ECM core code and your game code, so future ECM updates won't interfere with your game code at all.

    Take for example the Wall Grab And Wall Jump, as you can see it creates a custom controller 'MyCharacterController' extending the BaseCharacterController and uses this custom controller to add your game specific mechanics. This is the recommended way to work with ECM (and ECM2)

    This example source is fully commented however if have any further questions please let me know.

    Regards,
    Krull
     
  12. Sapien_

    Sapien_

    Joined:
    Mar 5, 2018
    Posts:
    102
    @Krull

    Thank you very much for the reply and help. Just another question. I was thinking of getting ECM 2 because it seems to have a lot more options. I was wondering how seamless updating to the newer version would be?
     
  13. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hi @Sapien_

    Glad I could help!

    ECM2, while it shares a lot in common with ECM, is basically a new product but with the added upgrade path and unfortunately it's not a direct upgrade path from ECM to ECM2.

    ECM2 is written from the ground up and uses a different / feature rich 'character motor' and adds a higher level layer of top so it includes many features out of the box while ECM is a more general purpose lower level (aka: more to the metal) solution.

    Kind regards,
    Krull
     
  14. JohnnyGo-Time

    JohnnyGo-Time

    Joined:
    Aug 8, 2021
    Posts:
    17
    Thank you! The "Attach to Unity" was new to me and helps me understand a lot more now
     
  15. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    No problem, glad I could help!

    Regards,
    Krull
     
  16. Pixelith

    Pixelith

    Joined:
    Jun 24, 2014
    Posts:
    580
    Hey there, just a question before I move forward with my own implementation.

    Is multiplayer on the roadmap? I've been thinking of a way to try and implement mirror or pun as a "CharacterNetwork" class but I would feel silly to start that if you're already working on it.
     
  17. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hello @Rin-Dev

    Yes is a planned feature, unfortunately no on the short list as still have some fixes and features before it, sorry.

    Kind regards,
    Krull
     
    Pixelith likes this.
  18. Pixelith

    Pixelith

    Joined:
    Jun 24, 2014
    Posts:
    580
    Alrighty, cool beans then! I already started on my own implementation.

    It isn't much at the moment, and a lot of the code is handled client side which isn't good for a competitive scene. But, I only wanted to make a fun multiple adventure type game so I think it works out well for me.
     
    Krull likes this.
  19. Broudy001

    Broudy001

    Joined:
    Feb 12, 2020
    Posts:
    72
    Morning/Evening, looking at having the controller follow a spline around a level, anyone tried this or have any advice on it. I'll probably pick up dreamteck splines as it has a lot of great features for spline placement.
     
  20. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hey @Rin-Dev,

    Looking pretty cool and fluid! keep the good work!

    Regards,
    Krull
     
  21. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hi @Broudy001

    It should work with any splines package, it includes a follow path example using a Cinemachine path, you can easily adapt it for other spline solution.

    Kind regards,
    Krull
     
    Last edited: Aug 19, 2021
  22. Alienouz

    Alienouz

    Joined:
    Nov 3, 2019
    Posts:
    5
    Hi Krull
    thanks for your amazing asset.
    very useful and really appreciate it.

    I just want to know the way to animate the character with transitions.
    I got a character and some animations from Mixamo.com
    and wonder how to make the character move when controlling the movement?
    I use ECM2 with the input system
     
  23. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hi @Alienouz,

    Thank you, happy to hear you like it!

    About your question:

    To animate a ECM2 character, you should use plain Unity methods as ECM2 does not use animation or force you to animate your character in a special way, however you will read the character state (IsOnGround, IsFalling, its speed, etc) and use this data to feed your animator, as you can see in the included UnityCharacterAnimator included script (ECM2\Samples\Examples\2.- Animation\2.1.- Character Animator\Scripts).

    By other hand, if using root motion, you will need to enable the Root Motion property in the Character, and add the RootMotionController to your model GameObject (the one with your Animator) as this hepler component is the one who feeds the animation velocity to the character.

    Let me know if you have any questions.

    Kind regards,
    Krull
     
    Alienouz likes this.
  24. Alienouz

    Alienouz

    Joined:
    Nov 3, 2019
    Posts:
    5
    thanks Krull for replying..
    I will check the example and try to implement it with my character.
    just hope there was a tutorial for beginners like me.
     
  25. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hi @Alienouz,

    Thank you for your suggestion and definitely will take it into consideration as part of a future update!

    In the meantime, do not hesitate to message me if you have any questions.

    Regards,
    Krull
     
    Alienouz likes this.
  26. dmarqs

    dmarqs

    Joined:
    Oct 16, 2013
    Posts:
    41
    Hi @Krull,

    I have my game fully implemented with ECM 1 and I used a custom solution for a lot of stuff. Is there a doc with migration instructions to ECM 2?
     
  27. Susihiisi

    Susihiisi

    Joined:
    Jan 11, 2018
    Posts:
    32
    Hay. I'm trying to make this work on planet, but I just can't get my head around what it uses to determine the movement direction. Camera relative movement works well on normal scene with default orientations, but when the character is on planet and the orientation is something completely else, it certainly doesn't move relative to camera. Maybe it could be good if the planet center would be the down direction, or that the up direction for controls would be character's up direction, but I'm bit confused how to do that right meow.

    //Edit: Eeeeh. I need to check again. Apparently I had ECM 1 while I thought I was using ECM 2.
    //Edit2: Well, the planetwalk seems to be doing what I need. Silly meow.
     
    Last edited: Aug 25, 2021
  28. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hi dmarqs,

    Thank you for your interest in ECM2!

    About your question:

    While ECM2 shares a lot in common with ECM it is a completely new product written from the ground and as a result unfortunately there is not a direct port from ECM to ECM2.

    My suggestion for you (and actually my general advice when thinking about upgrading) is if your current project has already started and more than early prototyping I suggest you to keep ECM.

    By other hand for new projects I suggest ECM2 as it improves the still very capable ECM and offers much more features to help you with your projects.

    Kind regards,
    Krull
     
  29. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hello @Susihiisi

    Thank you for the update and happy to hear you were able to solve your current issue and it is working for you!

    Best Regards,
    Krull
     
  30. Organik05

    Organik05

    Joined:
    Feb 15, 2016
    Posts:
    10
    @Krull Is it possible to get a zoom feature for the Top down? I would love to give the player the ability to zoom out and zoom in when needed for some puzzles I'll be implementing in my game, and for animations later. Or if you had a code suggestion for quick adding in there I'd appreciate it! Thanks, amazing tool love this thing, saved me so much time on creating my own controller!
     
  31. Marsunpaisti

    Marsunpaisti

    Joined:
    May 3, 2018
    Posts:
    22
    How networking friendly is this? I'm looking to integrate with Photon Fusion, which requires manually running any simulation in their NetworkFixedUpdate step. Does your API provide a way to do this? I have the first version of ECM, but that code had a lot of reliance on Time.DeltaTime internally and adding [Networked] attributes to the internal variables was kind of difficult as Fusion requires blank getter&setter to be able to do code generation for those fields internally.

    I.e. shortly put:
    Can I run the simulation steps manually using a deltatime parameter?
    Can I sync the internal variables?
     
  32. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hi @Organik05

    While not out of the box as it is a more game specific feature, and I would like to keep ECM and ECM2 as a general purpose general controller, I think you can easily add it, for example using Cinemachine.

    With Cinemachine you can have a secondary camera (your zoom camera) and simply toggle between your main and zoom cameras and Cinemachine will handle the smooth transition for you!

    Alternatively you can just adjust your camera distance and or FOV, but honestly I would prefer Cinemachine as it has been created for this and many more with greater flexibility.

    Thank you, happy to hear you like it!

    Kind regards,
    Krull
     
    Organik05 likes this.
  33. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hello @Marsunpaisti

    Thank you for your interest in ECM2!

    About your questions:

    Unfortunately I am no quite familiar with Photon Fusion and honestly networking is not my best suit, however I can talk about how ECM2 works.

    ECM2 follows the same method used in the original ECM, as both being rigidbody based, requires its movement to be updated within a FixedStep, however a big difference with ECM is, as ECM2 implements a continuous collision detection and response algorithm (aka Collide and Slide) it now holds a proprietary velocity (eg: the character's velocity) and the Rigidbody is used as a 'transport'.

    Each Move we calculate the new Character's velocity from its input (eg: a desired velocity) 'slide' it each collision found during its movement, at the end of the character move, we set the character's velocity as the rigidbody so PhysX physically move us.

    After the internal physics update (eg: a coroutine simulating a LateFixedUpdate) update the character's velocity from external forces acting on the rigidbody (handled by PhysX) so after this LateFixedUpdate the character's velocity contains (if desired) our movement velocity plus any external forces on Rigidbody.

    Can I run the simulation steps manually?

    Mmm, while you can turn off auto simulation and use Simulate to your custom rate, it does not cause FixedUpdate to be calle, so some kind of sync should be implemented as internally some methods make use of Time.deltaTime.

    Can I sync the internal variables?

    Sure, this is all exposed to code, so you should be able to sync any data needed.

    Hope this helps you, regards,
    Krull
     
  34. Sapien_

    Sapien_

    Joined:
    Mar 5, 2018
    Posts:
    102
    Hello again. Would like to say I have had a lot of fun creating a new controller.

    However I have two issues/questions.

    1.) I have added a wall slide mechanic. However because the character is not grounded, if he wallslides on a moving platform, he won't wallslide correctly on the moving platform. What do I do to fix this?

    2.) I want to change the way inputs work. Instead of using the new input sytem which the script uses, I was going to use Rewired. Due to being a designer rather than programmer. I have been apprahensive of what lines to replace. I was wondering what the process would be to replace the input system?
     
  35. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hi @Sapien_

    Mmm, honestly not following here, do you mean landing on a platfrom? I appreciate if could provide further information so I could help you better.

    While ECM2 uses by default the new Input System, you can completely ignore it and replace it with any other you prefer, however your project will still need the New Input system package installed or you will get errors.

    You can find a working example of how to use the old input system included in the input section, however please make sure you set your active input handling to BOTH otherwise the examples would not work. The example is fully commented and should help you to get started with it.

    A character will not process any input if you leave its actions property empty, so you use its input commands SetMovementDirection, Jump, StopJumping, Crouch, StopCrouching, etc to issue your character to perform its actions.

    In the end a character can be controlled the way you prefer, for example it can be controlled by AI, a visual scripting solution like the included bolt examples, new input system, old input, rewired etc.

    Regards,
    Krull
     
  36. Sapien_

    Sapien_

    Joined:
    Mar 5, 2018
    Posts:
    102
    Thank you so much for helping me with the inputs. I have successfully replaced them in a safe way.

    Now as regards the other issue. Imagine if the moving platform is a giant cube and the Giant Cube is moving left to right. ECM2 allows the player to land on the Giant Cube and have the correct physics by moving with the Giant Cube.

    However suppose *Instead of landing* on the Giant Cube, the player is wall sliding on the sides of the Giant Cube. Right now, the player does not move with the giant cube while wall sliding on the Giant Cube's sides. How do I make it so that it does?


    Thank you by the way.
     
  37. khoaharp

    khoaharp

    Joined:
    Oct 19, 2020
    Posts:
    3
    Hi,

    I'm having a problem when using this asset on a moving platform at high velocity. Anytime I do a jump, my character is dragged backward. So is it possible to remove or minimize this drag effect? The behavior I want is like when you do a jump in an airplane cabin without flying to the back of the plane.

    Also, the camera is extremely shaky. I guess it has to do with the camera collider bouncing on the wall collider.

    You can check the video here
     
  38. khoaharp

    khoaharp

    Joined:
    Oct 19, 2020
    Posts:
    3
    Setting "Falling lateral Friction" to 0 seems to do the trick.
    The only thing left is the shaky shaky camera :p
     
  39. Alienouz

    Alienouz

    Joined:
    Nov 3, 2019
    Posts:
    5
    Hi Krull,
    I'm trying a simple code here.

    Code (CSharp):
    1.         if (mycharacter.IsWalking())
    2.         {
    3.             animator.SetBool("isWalking",true);
    4.         }
    5.         else
    6.         {
    7.             animator.SetBool("isWalking", false);
    8.         }
    the default animation state is idle
    so this should make the character play the walking animation whenever the character moves.
    however, the character is starting the game with the walk animation.
     
  40. JohnnyGo-Time

    JohnnyGo-Time

    Joined:
    Aug 8, 2021
    Posts:
    17
    Hi Krull,

    With ECM2, can you suggest the basic approach I should use for a 3rd-person game where I want to jump from one controllable character to another? Like character A takes a turn, then the control & camera jumps to character B, then to character C etc.

    i.e. I have been reading the manual and forum, but what is the flow I should call various ECM2 functions to cycle through these controllable characters and move the camera to them etc? Thank you!
     
  41. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hello @Sapien_

    Ah yes, so in order for the character to move with your 'grabbed' platform, while grabbed you will need to add your grabbed platform lateral velocity to your character's velocity so it will be moved with the gian cube.

    Another possibility (not tested, just an idea) is to set up a joint between the character and grabbed cube, so the Character's rigidbody will be moved along the cube by the Physics system, here please make sure you have the Character's impart external velocity enabled.

    Regards,
    Krull
     
  42. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hi @khoaharp

    For fast moving platforms I suggest moving those using the PlatformMovement component as this will provide the most accurate platform velocity giving the character the most stability.

    Also depending on your intention, make sure to enable / disable the impart platform velocity option as this affects the character's momentum when jumping off a moving platform.

    Last but not least, as you already noticed, tweaking the falling lateral friction, braking deceleration falling and Air control will modify the falling behaviour.

    For the camera, you can make the camera ignore the colliders adding those to the Third Person Camera Controller Ignored Colliders list so it won't collide with those.

    Regards,
    Krull
     
  43. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hi @Alienouz

    The Character IsWalking method refers to its current movement mode, remember a movement mode simply tells the system how the character should be moved, not directly reflects if the character is moving (eg: its speed > 0), but tells its current active movement mode.

    In your case, to check if the character is actually moving, you can use its current movement direction vector (eg: its input movement direction) or its current velocity.

    Regards,
    Krull
     
    Alienouz likes this.
  44. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hi @JohnnyGo-Time,

    This is a great option for a Controller, where it is not directly tied to a particular character and simply takes control or possesses a Character, or in your case alternate between different characters (your current active Character).

    Please take a look at the included Input example 1.3.- PlayerInput Character Controller, as this shows how to externally take control of character (not from a Character derived class), and while it uses just one Character, you can easily extend to be your current active character.

    Remember, If you leave the Character actions field empty, it will not process any input so you are free to simply call its input action commands from another script, AI or visual scripting solution, just like included Bolt examples.

    Cheers,
    Krull
     
    JohnnyGo-Time likes this.
  45. jimmygladfelter

    jimmygladfelter

    Joined:
    May 3, 2020
    Posts:
    83
    I really love this asset. I appreciate your hard work, great examples, and helpful documentation. I love how it's super extendable. Any idea when you might do a wall climbing / hanging example (I think it was mentioned in a previous post)?
     
  46. Krull

    Krull

    Joined:
    Oct 31, 2014
    Posts:
    771
    Hello @jimmygladfelter

    Thank you very much for your kind comments!

    While I can not provide a definitive date as unfortunately this is not my full time job I will try to push this update with some additional gameplay examples among some minor fixes for the end of this month or max half next month.

    Kind regards,
    Krull
     
    jimmygladfelter likes this.
  47. jimmygladfelter

    jimmygladfelter

    Joined:
    May 3, 2020
    Posts:
    83
    Awesome news!
    Thanks! Look forward to it!
     
  48. JohnnyGo-Time

    JohnnyGo-Time

    Joined:
    Aug 8, 2021
    Posts:
    17
    Hello again! Can I ask for some help: as soon as I install ECM2, my UnityEngine.UI.Buttons no longer get mouse clicks because ECM2 is "intercepting" them.

    Please see the description in this quick video to get oriented, and let me know any info or debugging I can send as I have been trying for days to resolve this. I want to use the physics/collisions and camera from ECM but already have my own input actions.
     
  49. ge01f

    ge01f

    Joined:
    Nov 28, 2014
    Posts:
    121
    @Krull In the docs they say to use a Frictionless physics component, and you provide one. However I found my NPCs idling were slowly sliding around the terrain. I changed the friction to 5 which stopped that, is that going to cause a problem?

    Is there a way to stop the sliding while still staying frictionless?

    They were using the basic Agent controller you had in your example.

    Also, separately from the frictionless sliding, is there a way to lock them into place (or make them harder to move) if they are pressed by the players capsule collider. They slider around easily now which looks weird. I would prefer they are only moved by animation, or are minorly moved by physics, rather than just sliding around.
     
  50. my_little_kafka

    my_little_kafka

    Joined:
    Feb 6, 2014
    Posts:
    87
    Hello! Finally I upgraded to ECM2, and I really love it so far, it's way easier to customise compared to ECM1 and the built–in feature of ignoring character pushing is very welcomed, I never managed to do it by any other means, and it's perfect for my game.

    I want to ask a question. My game's architecture is quite unusual — I use only a single GameObject that calls MonoBehaviour functions like Start(), Update(), FixedUpdate(), etc., and every other object just recieve these functions — I have a PlayerCharacterManager that recieves the functions and relays them to PlayerCharacterController, I have a ActorManager that recieves the functions and relays them to ActorControllers (NPCs and such), and so far it is working all right.
    If I will change the base Character.cs to recieve these functions from the main GameObject, without having actual MonoBehaviour functions, could it theoretically break the whole system?

    Character.cs has a #region MONOBEHAVIOUR region where it stores every needed MonoBehaviour call and relays them to your custom On_ calls, if I will just comment this and relay the calls from Manager objects, could it add some weirdness to how CharacterControllers are acting? I'm asking this here because I can't override this behaviour in my own code and have to edit the base code and I'm not sure if there could be non–obvious problems that could bite me in the back in the long run