Search Unity

Actor Controller - an advanced character controller

Discussion in 'Assets and Asset Store' started by Tryz, Oct 13, 2015.

  1. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Thanks. :D

    I never really saw these as Actor Controller features. I think of the AC as handling movement, collision, gravity, grounding, etc.

    Sitting down is more an animation concept. So it would be in the Motion Controller.

    That said, I'm curious how you would define the act of sitting... maybe I'm missing something and there is something the AC could help with.
     
  2. LukeDawn

    LukeDawn

    Joined:
    Nov 10, 2016
    Posts:
    404
    Sitting is probably a more animation based thing, though it's primarily the orientation of the colliders that got me thinking. I noticed for things like jumping and crouching in the MotionController, that the main capsule was angled with the body - not sure if that's an MC thing or something that the AC does on command.

    With the AC handling movement, collision, and gravity, I thought that swimming and laying down could come under it's jurisdiction as both involve the orientation of the AC colliders to change from vertical to horizontal.
     
  3. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Even swimming and laying down (like sitting) are more animation based.

    The way I do colliders (using Body Shapes) is that you can select the feet and head points. Then, I shift sphere colliders between those two points. If your character is vertical, they stack vertically. If your character lays down, they stack horizontally. If your character leans forward, they lay out diagonally. This captures the rough shape of your character, but is still efficient.

    During all of this, the root of your character typically doesn't rotate 90 degrees to lay down. What I've learned is that even when flying or swimming (or laying down), you really don't want your root rotating. For example, lets say you're walking forward down the z-axis... that's forward. If you're laying down to swim and swimming "forward", that's still forward down the z-axis. So, it doesn't really make sense to rotate 90 degrees and have the character forward be down the -y-axis.

    So, the AC doesn't really care if you're animated (walking or swimming). It will just moves the character as it's told to. Then, it will look to see if where it's moving is valid, apply gravity, collisions, etc.

    I hope that makes sense.
     
    TeagansDad likes this.
  4. LukeDawn

    LukeDawn

    Joined:
    Nov 10, 2016
    Posts:
    404
    I see what you mean about not rotating the AC's object, I was just wondering if there was a better method than in the (cobbled together) image below...
    Image2.jpg
     
    Tryz likes this.
  5. Deadlyapples

    Deadlyapples

    Joined:
    Dec 30, 2013
    Posts:
    54
    SO! What assets do I need to buy from you to provide me with a complete character controller setup? :p Just want to say this is the coolest asset / collection of assets I have seen so far.

    Are the controllers custom controllers in the vain of a character controller but with the ability to interact with ridgidbodies?
     
  6. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Really, I think this is the right way.

    Of course, we can do things with the colliders like disable them temporarily, change the shape, or use the Unity sphere like I mentioned, but keeping the "forward" forward seems right.
     
    LukeDawn likes this.
  7. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Thanks. :)

    Check out this page:
    ootii Character Framework

    I talk about each of the components in the solution. What I try to do is keep things modular. This way you don't have to spend money on something you don't need. That also means you can get things (that you need) over time.

    If you care about animations, start with the Motion Controller. It includes the Actor Controller, some basic cameras, animations, etc. Play with it and then decide if you want an advanced camera solution, spell casting, etc.

    If you don't care about animations or humanoids, starting with this Actor Controller allows you to build some cool gameplay functionality like wall-walking. You can upgrade to the MC later (as needed).

    I hope that helps. :)

    The AC and MC are character controllers. Think of the AC as the low-level collision detection part and the MC as the high-level animation part (that uses the AC).

    My character controllers don't require rigidbodies, but you can add them if you flag them as Is Kinematic. This way, they can interact with other rigidbodies. There are some limitation, but mostly those limitations are Unity's and how Kinematic rigidbodies interact with non-Kinematic rigidbodies.
     
    Deadlyapples likes this.
  8. Deadlyapples

    Deadlyapples

    Joined:
    Dec 30, 2013
    Posts:
    54
    Thanks for the response mate! :) awesome stuff
     
    Tryz likes this.
  9. LukeDawn

    LukeDawn

    Joined:
    Nov 10, 2016
    Posts:
    404
    I can see that. What if I was to add an extra collider for horizontal stances. Could that (relatively easily) be tied in to the AC? I know I can change the AC.Height to something closer to the avatar in a horizontal stance, but the Radius is XZ, I can't change just the Z.

    Or something like adding a new BodyShape that was a capsule with a different orientation without affecting the orientation of the AC gameObject?

    As a side note - when I click the + sign for adding a body capsule in the AC inspector - it always adds a sphere collider not a capsule collider.
     
    Last edited: Mar 4, 2018
  10. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Yes. You can totally do that.

    Correct. I talk about that a bit in the User's Guide (page 9).

    Unity's capsule collider can't randomly rotate based on the end points (foot and head) that I talked about. So, I use Unity sphere colliders to represent my body shape capsules when you have "Use Unity Colliders" checked. Then, I manage their position as the character animations. Fortunately, spheres are crazy fast when it comes to collision detection.

    If you wanted, you could uncheck that check box and then add your own Unity colliders. I just wouldn't manage them with my body shapes.
     
  11. LukeDawn

    LukeDawn

    Joined:
    Nov 10, 2016
    Posts:
    404
    I've got an odd issue with colliders. When I add an ActorController to the root of an avatar at runtime, even though UseUnityColliders is set in the inspector for each BodyShape - I'm not getting any colliders. Am I missing something, or doing something wrong?
     
    Last edited: Mar 6, 2018
  12. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    I think I know what's happening.

    When you create an AC via code, there are no body shapes by default. So, there are no colliders.

    When the editor-only inspector code for the AC run, it looks to see if there are any body shapes. If there aren't any, then it creates the default ones. This code only runs in the editor and doesn't create colliders because it's meant to be editor-only.

    So, when you create the AC via code, you want to create the body shapes you want. If you just want the same defaults I use in the inspector, check out the ActorControllerEditor.cs CreateDefaultShapes() function at line 1114. You can copy that code to create your body shapes at run-time.

    Just make sure to set the "UseUnityColliders = true" as well.
     
    hopeful and LukeDawn like this.
  13. LukeDawn

    LukeDawn

    Joined:
    Nov 10, 2016
    Posts:
    404
    Just run a quick test, that seems to work fine. Just need to tailor the BodyShape parameters now. Thank you.
     
    Tryz likes this.
  14. LukeDawn

    LukeDawn

    Joined:
    Nov 10, 2016
    Posts:
    404
    I take it that using Unity Colliders is less performant than using the alternative non-allocation collision physics used when UseUnityColliders is false? Is there any other difference internally to the ActorController of either using unity colliders or not?
     
  15. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    The AC does all its collision reactions based on the "body shapes". The performance is better and I'm in control of the reactions.

    The Unity colliders are really just to interact with Unity's physics if you need (ie to move objects out of the way as you walk). None of the AC code uses the Unity colliders. Things like arrows hitting targets do though.
     
  16. LukeDawn

    LukeDawn

    Joined:
    Nov 10, 2016
    Posts:
    404
    Aha, so if I only need a basic shape collider as a trigger for my own purposes (mainly just targeting), I'm way better off letting AC do it's thing with IsCollisionEnabled and the setting the 3 layers of terrain/solid objects to collide with, and adding my own capsule trigger collider?
     
  17. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Exactly.
     
    LukeDawn likes this.
  18. LukeDawn

    LukeDawn

    Joined:
    Nov 10, 2016
    Posts:
    404
    That's great. Thanks for the excellent support.
     
    Tryz likes this.
  19. Seith

    Seith

    Joined:
    Nov 3, 2012
    Posts:
    755
    @Tryz Hi Tim! I've been meaning to check out your asset for a long time and I have a few questions for you, if you don't mind! :)

    1) Are you still actively supporting this asset?
    2) Does it work with Unity 2018.2?
    3) Does it work with Mecanim (for animations)?
    4) Does it work with Rewired (for inputs)?
    5) Does it work with Cinemachine FreeLook (for the camera)?
    6) How does it work with IKs (I'm currently using Final IK)?
    7) How would you say it roughly compares to Opsive's Ultimate Character Controller?

    Thanks for your time!
     
  20. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Hey @Seith

    1. Absolutely. The reason you don't see much activity here is that my Third Person Motion Controller asset includes this asset and most activity happens on that thread.

    2. Yes. I use Unity 2018.2.61f for my base development, but I deliver on Unity 5 (for now) for backwards compatability.

    3. Yes, but the AC really doesn't do anything with animations. Think of it as a low-level character controller (collisions detection, movement, gravity, etc.). The Motion Controller is the high-level character controller that manages Mecanim states and tells the AC what to do.

    I include examples of how you can use the AC (stand-alone) with Mecanim.

    Hopefully this write-up explains the framework.

    4. Yes. I abstract out the input so you can use any input solution. You can get a Rewired integration here where I talk about Input Sources.

    5. Yes, but... I haven't dug into Cinemachine, but the AC doesn't care about the camera at all. If you don't own the MC, you'll create an "actor driver" (or use my basic one) that tells the AC what to do.

    The MC's motions (code + animations + AC) does care about the camera sometimes. I know others have used Cinemachine with it, but I haven't personally.

    6. The AC itself doesn't care about bones and IK at all. So, you're fine.

    With the MC, IK is totally fine too. Lots of people use Final IK with it. I've got some hooks where you can enable/disable IK for different motions and run your IK work post-animation.

    7. I haven't used UCC.

    After answering the questions, I really think you're looking for the Motion Controller as it's a higher level character controller that helps to manage animations. I certainly wouldn't push you into that, but you may want to look at it.
     
    TeagansDad and Seith like this.
  21. Seith

    Seith

    Joined:
    Nov 3, 2012
    Posts:
    755
    Thanks for your detailed replies! I'll head over to Motion Controller then...
     
    Tryz likes this.
  22. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402


    Before updating, PLEASE READ THIS!

    This update REQUIRES that you delete your 'Assets\ootii' folder and re-import the assets.

    Today I'm pushing up a massive update to all my assets. The primary goal is to support Unity's Assembly Definition Files, but there's some other cools stuff as well:

    1. Assembly Definition File support
    2. New character wizard (for the Motion Controller)
    3. Restructure folders so demo files are in one place (easy to remove)
    4. Smaller download size

    Please back-up your project and wait for all my assets (that you own) to be updated by Unity. :)

    As always, I'm here to help.
     
    hopeful likes this.
  23. Aston-Martin

    Aston-Martin

    Joined:
    Jul 5, 2012
    Posts:
    64
    Considering getting this assets, after watching the spider walking on the wall video ;-)

    Quick question,
    (1) Does it work in zero gravity scenario ? can it support character walking, JUMPING on surfaces with zero gravity environment?
    (a) Example walking on a cube surface, jump over the edge to another surface.
    (b) Example walking&Jumping on a spherical. Inter-sphere jump ?
    (c) Example walking&Jumping on cylindrical/pipes. Inter-pipe jump ?

    In summary, need a character controller with magnetic boot in a zero gravity environment. Wondering if you think this asset fits the requirements ?
     
  24. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Hey @Aston-Martin

    The answer is 'yes' to most of the questions except the jump. There's nothing that will automatically rotate the character from one sphere or pipe to another as they jump over. You'd have to write code to do that.

    There are some properties and functions to help with that custom code, but it would be custom. I talk about it in this video (16:30):


    Once the character is "stuck" to the surface, it will rotate around it. Think of gravity as being from "head-to-feet" and not the normal "down".

    Hopefully that makes sense. Check out the web demo from the Asset Store page and you can see it in action.
     
    rubble1 likes this.
  25. Niels40

    Niels40

    Joined:
    Nov 6, 2017
    Posts:
    20
    hi @Tryz ,

    I have been at your actor controller asset and have a couple of questions.

    In my case specifically i need a character controller that can move on a moving ship. I however do not want the character to slide away if the deck is slightly rotated.

    The game itself is in first person.
    Do you think actor controller is a good solution?
     
  26. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Hey @Niels40 ,

    I have done a lot of work to ensure the character is stable on platforms as they move and rotate. In fact, I know of people use the CC on zephyrs and other air ships. That said, it may not be able to handle every crazy situation you can think of.

    So, my answer is probably. :)
     
  27. tcmeric

    tcmeric

    Joined:
    Dec 21, 2016
    Posts:
    190
    Hi, I have been doing a little debugging and seem to have a high cpu usage on the ActorController.UpdateMovement. Can you have a peep at my debug here. Is this normal? Looks like get ground distance is 1/2 of that? (Still trying to get used to the darn 2018 debugger, vs 2017).

    ootii_controller.png
     
  28. tcmeric

    tcmeric

    Joined:
    Dec 21, 2016
    Posts:
    190
    Sorry, nevermind. I had the debug toggle turned on. Turning it off seemed to sort most of the cpu overhead. Thanks!
     
    Tryz and hopeful like this.
  29. tcmeric

    tcmeric

    Joined:
    Dec 21, 2016
    Posts:
    190
    One last issue (I hope :D ) . I am using the NavmeshDriver.cs . When I want my agent to stop, I call
    ClearTarget(); This stops the agent. However, when I use the method SetDestination(), it does not start the animator method again (which I see is called in update). What is the best way to clear a target (and stop), and then set a new one, so that the update loop works correctly again?
     
  30. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Hey @tcmeric ,

    Good find. That's a bug.

    To fix the bug, add this code to line 317 of NavMeshDriver.cs (in the ClearTarget() function):
    Code (CSharp):
    1. mAgentDestination = mActorController.transform.position;
    With that, you still shouldn't use SetDestination() as that's protected. Instead, just set the Target or TargetPosition property. Here's what I used to test:

    Code (CSharp):
    1. using com.ootii.Actors;
    2. using UnityEngine;
    3.  
    4. public class Test_NMStartStop : MonoBehaviour
    5. {
    6.     private void OnGUI()
    7.     {
    8.         if (GUI.Button(new Rect(10f, 10f, 100f, 20f), "Start"))
    9.         {
    10.             NavMeshDriver lDriver = gameObject.GetComponent<NavMeshDriver>();
    11.             lDriver.Target = GameObject.Find("Target").transform;
    12.         }
    13.  
    14.         if (GUI.Button(new Rect(10f, 35f, 100f, 20f), "Stop"))
    15.         {
    16.             NavMeshDriver lDriver = gameObject.GetComponent<NavMeshDriver>();
    17.             lDriver.ClearTarget();
    18.         }
    19.     }
    20. }
     
    tcmeric likes this.
  31. tcmeric

    tcmeric

    Joined:
    Dec 21, 2016
    Posts:
    190
    Perfect. Thank you very much. I was watching your input video and you said "I really like to use get/set". Haha, I guess you really do. I missed that, as my eyes were looking for a method. :)
     
    Tryz likes this.
  32. eblumrich

    eblumrich

    Joined:
    Nov 12, 2015
    Posts:
    105
    Hi. I've been using your products for about a year now, and they are great- they have allowed me to do a lot of stuff that normally would be far beyond my skill level.

    That having been said, I am encountering an issue:

    Whenever my characters jump, or even step off of one surface to another, the character seemingly has to pause, and slide for about .5 seconds.

    Any idea why this is happening?

    Thanks in advance for any assistance you can provide!
     
  33. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Hmmm... I'm not seeing that here.

    Does this happen for super simple colliders too? For example, if you create a simple scene where you walk off one cube and onto another... is there a pause?

    If you want to email tim@ootii.com some pictures, that may help me understand more too.
     
  34. Zebbi

    Zebbi

    Joined:
    Jan 17, 2017
    Posts:
    521
    I'm currently using Character Controller for an FPS and I'm using my own acceleration, deceleration and tapping into IsGrounded for jumps and such. I really just need a replacement so I can use a box collider instead of the built-in capsule CC uses, is Actor Controller basically a drop-in replacement? I'm avoiding physics totally as I need it to be just like 90's movements with predictable motion, but I want to make sure it'll be a simple replacement?
     
  35. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    It's not just a drop in and replace. You will need to create a custom driver to control how you want the AC to work.

    It is not physics based unless you create the driver that way. I do include a basic input driver.
     
  36. Zebbi

    Zebbi

    Joined:
    Jan 17, 2017
    Posts:
    521
    Yeah, I want it without physics, which is great. As I did mention, I am already making a movement engine using character controller... I'm coding the inputs that take care of the vector3 that goes into "Move", and I just want to know if it's easy enough to effectively change the vector3 intead of going into character controller, goes into Actor Controller, and if it has a built-in IsGrounded-type check.
     
  37. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    The AC does have a Move() you can call. That's what a driver would do. So it sounds like your movement engine is the driver. Calling Move() is simple.

    From there, I'll have built in ground checks, collision detection, platforming, etc.
     
    Zebbi likes this.
  38. Zebbi

    Zebbi

    Joined:
    Jan 17, 2017
    Posts:
    521
    Excellent! And is there an equivalent to isGrounded() built-in? I'm using character controller's to detect standing on floors to prevent double-jumps, it's as simple as checking if isGrounded() is true.

    Also, the main issue I've had with character controller is the inability to use a box collider with it. I'm trying to do a 90's style Doom movement where you just fall of edges instead of sloping down the sides of them, which is how a capsule will fall off edges. Is it possible to use a box shaped collider with AC? I'd still like to do slopes with it if possible, so I'm not sure howw AC would handle those.

    Finally, I'm doing my jumping by adding a velocity to the vector3 and subtracting from it, and sending this also into Move(). This would work the same with AC, wouldn't it, rather than having to use physics forces?
     
    Last edited: Mar 11, 2019
  39. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    There is an IsGrounded property. There is a state structure with other values too... Velocity, ground object, etc.

    The grounding uses a line. Then you can add a capsule or sphere if you want. There is no support for a cube, but I don't think you need it.

    Yes. You can do a jump with Move(). Just disable gravity and ground locking first.
     
  40. Zebbi

    Zebbi

    Joined:
    Jan 17, 2017
    Posts:
    521
    Ahh, the problem is as I said with character controller, you end up going off edges with a sloped curve due to the capsule shape. Other have had this issue:


    https://forum.unity.com/threads/charactercontroller-catching-corners-of-colliders.124343/

    https://forum.unity.com/threads/character-controller-capsule-problem.124538/

    https://forum.unity.com/threads/custom-collider-for-character-controller.23402/

    https://forum.unity.com/threads/change-character-controller-collider-capsule-to-a-box.45017/

    Etc, etc. I don't want to use physics or rigidbodies, I just want to use a box (or rectangle with neglegable z-depth so as to be able to traverse slopes) instead of a capsule, could this be considered for AC?

    Also, what does velocity do in the controller? I would have assumed velocity would have all been taken care of in the driver rather than the controller?
     
  41. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    The grounding uses a line. Then you can add a capsule or sphere if you want. There is no support for a cube.

    It's just for reporting the velocity... not setting it.
     
  42. Zebbi

    Zebbi

    Joined:
    Jan 17, 2017
    Posts:
    521
    Right, so there's no way of avoiding the sloping edge issue I mentioned with AC?

    Where does it get it's velocity from?
     
  43. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    As I've been saying, don't add a capsule or sphere and there will be no issue. Or have your ground be a separate layer from your walls.

    For the velocity, it comes from the movement that has occurred.
     
  44. Zebbi

    Zebbi

    Joined:
    Jan 17, 2017
    Posts:
    521
    Ah, so you can use AC without a collider shape? As for the walls, the sloping issue is only with floors, unless you mean using a capsule for walls only? What is the z-density and x-width of the grounding line? Does this mean that without using a collider, the player won't slope off floors but will have no height? I'm hoping AC would allow for the simplicity of a simple collison method that would avoid sloping off edges, but without the need for separating walls and floors to layers.
     
  45. Zebbi

    Zebbi

    Joined:
    Jan 17, 2017
    Posts:
    521
    @Tryz do you have a build I could demo that exemplifies that AC can move without sloping off edges? I'd like to purchase the asset but I really need to test a build of an example that has the player going off 90-degree edges without curving over the side, and without sliding or any physics-like behaviors.
     
  46. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    Unfortunately, no.

    I would say that if my responses and the documentation haven't clarified the answer than the AC would not a good fit for your project. I'm sorry.
     
  47. bingofly

    bingofly

    Joined:
    Sep 15, 2018
    Posts:
    27
    Hi @Tryz
    Just bought your asset and have some questions for you.

    1.In my game, I used box collider for detecting if a player enter or exit a district. I firstly added the actor controller on the player. Then setting body shape and collision layers. I clicked play button and found a capsule was added automatically on the player. But the unity internal function OnTriggerEnter/Exit didn't work. So the box collider can't detect the player any more. How can I make it working again?

    2.For player rotation, I used following code to handle it.
    Quaternion rotation = Quaternion.LookRotation(direction, Vector3.up);
    transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * 8);
    After adding actor controller, I tried the Rotate(rotation) function, but the player was rotating much more faster and never stopped. Then I tried SetRotatation(rotation), it was not smooth. I thought I had to still use the transform.rotation = Quaternion.Slerp(), but it seems can't work with actor controller.
    So I wanna ask how to create a smooth rotation like Quaternion.Slerp with actor controller.

    3. I found that sometimes the player is pushed into the wall by other npc. Both player and npc has actor controller, uncheck the pushback flag and has no rigidbody. The wall just have unity box collider. Do you have any advices for this issue?

    Thank you.
     
    Last edited: Mar 29, 2019
  48. TeagansDad

    TeagansDad

    Joined:
    Nov 17, 2012
    Posts:
    957
    You just need to add a Rigidbody with "Is Kinematic" enabled:

    upload_2019-3-29_9-23-27.png

    You might need to assign your trigger volumes to the "Ignore Raycasts" layer so that the Actor Controller doesn't collide with them.

    I've never really used Actor Controller on its own, as I've always used Motion Controller with it. @Tryz should be able to give you a better answer. But my suggestion would be to have a look at the Update() function in both ActorDriver.cs and AnimatorDriver.cs to see how they calculate the appropriate rotation Quaterninon per frame.

    If the NPC is using a NavMeshAgent, you can try putting a NavMeshObstacle on the player.
     

    Attached Files:

    Tryz likes this.
  49. daklab

    daklab

    Joined:
    Nov 24, 2013
    Posts:
    27
    @Tryz I have an issue regarding ceiling walking in combination with jumping.

    In the video below you can see that when I have "Keep Orientation" checked, the character controller doesn't have the smooth auto-tilt-toward-ground behavior I want. However, when I uncheck the setting to get the auto-tilt-toward-ground behavior I'm looking for, I get a tunneling issue when jumping from the ceiling (as seen toward the end of the video).

    What settings come to mind that I should edit to fix the tunneling issue while having "Keep Orientation" unchecked so that I get the auto-tilt-toward-ground behavior?

     
  50. Tryz

    Tryz

    Joined:
    Apr 22, 2013
    Posts:
    3,402
    If you want to jump and keep the orientation with the ceiling, you need to have 'Keep Orientation' checked.

    In not seeing a non-smooth Auto tilt behavior. But, I may not know what I'm looking for.

    For the tunneling, is your ceiling solid? The video makes it look like it's not. Without Keep Orientation, I try to find a 'world up' jump position. If your wall is a line, the tests may be skipping past the line. This is known as the 'bullet through paper' issue in game physics.

    Try thickening the ceiling. You can also try decreasing the collision step value.