Search Unity

Wheel Controller 3D - Customizable Three Dimensional Alternative to WheelCollider

Discussion in 'Assets and Asset Store' started by NWHCoding, Nov 17, 2016.

  1. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    Logo_White.png



    Wheel Controller 3D
    is a complete alternative to the Unity's inbuilt wheel collider.
    It allows for more realistic vehicle behavior, more customization and most importantly - improved ground detection. See for yourself:

    WebGL Demo (all the assets in the demo are included)
    Website & Video
    Auto-generated Documentation

    Features:

    • Wheel has width and length, not only a single point in the middle.
    • API with only minor differences from Unity's inbuilt WheelCollider - easily swappable.
    • Fully customizable via custom inspector. Adjust spring, damper, friction curves, geometry, etc.
    • Adjustable camber, caster and rim offset.
    • Pacejka friction model with support for different surfaces.
    • Fully adjustable at runtime.
    • Adjustable ground detection resolution.
    • Can handle wheel visuals by itself (rotation and position).
    • Suitable for different kinds of vehicles: cars, trucks, motorcycles, tanks, etc.
    • C# (OOP) with documentation and API reference.
    • Source code included.


    Screenshots:

    3D ground detection:


    Realistic suspension with camber and rim offset:
    2017-10-17_12-31-40.png

    Ground detection over the whole bottom surface of the wheel:
    2017-10-17_12-29-13.png

    Custom inspector:
    2017-10-17_12-36-58.png

    API similar to the Unity's wheelcollider for easier use and existing project conversion:



    A lot of development time went into this asset so I really do hope you like it.
    Also, suggestions for improvements are alway welcome.

    This asset is now available at the Unity Asset Store.
     
    Last edited: Mar 1, 2018
    krou and theANMATOR2b like this.
  2. 3r5k3n

    3r5k3n

    Joined:
    Jun 17, 2013
    Posts:
    17
    Looks great but is this asset limited to four wheels or does it work with more or less wheels?
     
  3. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    It works with multiple wheels. I have tested it on a vehicle with 8 wheels but there is no hard limit.
     
  4. Hermonirr

    Hermonirr

    Joined:
    Dec 23, 2013
    Posts:
    40
    Hi,

    We're working on a robot simulation. The physical robot has encoders on its motors to measure how much the motor actually rotated.
    We're looking for an alternative to Unity's wheelCollider to do that. Specifically, we need these features:
    1. Start the wheel and get a constant speed instantly (almost), like small electric motors do.
    2. Maintain a constant speed.
    3. Get an exact measurement of the motor rotation.

    Does Wheel Controller 3D support these features?

    Thanks.
     
  5. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    It supports the same features as the inbuilt wheel collider plus customizable curves (spring, damper, friction) and three-dimensional collider. It was primarily built for vehicles so I cannot guarantee that it will work on your robot.
    1.) Wheel speed is controlled via torque (be it motorTorque or brakeTorque or both at same time), so there is no way to set RPM to one value out of the box.
    2.) Maintaining the speed is up to the vehicle that controls the wheels. Wheels add forces to the rigidbody based on torque, terrain setup and surface but don't do any driving logic themselves.
    3.) wheelController.rpm is available in the same way as wheelCollider.rpm

    So no, I would not suggest it.
     
  6. RemexChris

    RemexChris

    Joined:
    Aug 4, 2015
    Posts:
    16
    Purchased this yesterday, finding it really useful so far. A couple of issues/fixes:

    1/ spring.compressionPercent should be 0 when airborne not 1.
    2/OnDrawGizmos does not have a null guard for wheel.visual - causes lots of null reference exceptions.

    Cheers,
    Chris
     
  7. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    Version 1.3 is on its way so I will add those two to the todo list for 1.4. Both are simple fixes.
    Also note that 1.3 brings some improvement to handling overall.
     
  8. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    I had some stability issues to fix so v1.4 is on it's way - along with bug fixes for these two.

    v1.4 Change log:
    - Solved any remaining stability issues - vehicles are now stable with much broader range of damper values.
    - Minor API and documentation updates.
    - Replaced demo map - WebGL demo should run better on PCs with weaker hardware.
     
  9. SeriouSerg

    SeriouSerg

    Joined:
    Jan 27, 2013
    Posts:
    49
    Hi!

    Thank you for this wonderful asset.
    Please tell how to setup the car for drifting. I noticed a strange thing - if you use a front-wheel drive, the drift is possible, if rear - no, although it should be Vice versa.

    And another question - can you share the extended test scene?
    Thanks.
     
  10. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    Glad you like it so far :D

    As for drifting - that is due to the force being applied equally to the both (rear) wheels which is not the case in a "normal" RWD car. The asset that I'm developing at the moment is using WC3D and as soon as I implemented a simple differential at the rear things got to behave like they should. What is happening in a real with a real differential is one rear wheel losing traction either due to (1) too much torque or (2) too stiff differential where the wheel on the outside spins faster and makes wheel on the inside lose traction which results in so called "oversteer". Try applying torque to only one of the rear wheels and you will see different behavior from what you have at the moment.

    I tried re-downloading the package from the store and it seems that I forgot to activate camera before deploying - oh my.

    If by extended you mean the old one - no problem. Send me a mail and I will send it over. Also, I will include both scenes in the next version.
     
  11. SeriouSerg

    SeriouSerg

    Joined:
    Jan 27, 2013
    Posts:
    49
    Thanks a lot, Aron!

    You gave a chance to my project that almost died due to the fact that the standard wheel physics in Unity 5 is completely unusable.
    About the differential I understand you, I will try.
    Should be possible to chat with you privately about the source code?
    My email:
     
    Last edited: Jan 23, 2017
  12. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    Of course.There is a "Support mail" link on my publisher page: http://u3d.as/hjt
    I would suggest you remove your email from the forums or you might get a lot of spam from all the bots.

    I already submitted for review corrected scene with pre v1.4 terrain (one in the YouTube video). Those guys doing asset store reviews must love me since I give them something to do all the time...
     
  13. RemexChris

    RemexChris

    Joined:
    Aug 4, 2015
    Posts:
    16
    Hi NWHCoding, just playing with the latest version and still have a few niggles:

    1/I use a skinned animation to control my suspension and then rotate my wheel on top of that so I do not want to set a wheel visual. This currently gives me a warning every frame in the editor. (I have just commented this out and replaced it with a null guard.)

    2/There seems to be a bug still with springCompression which sometimes seems to return odd values. I was initially using this to drive my suspension animation, but it occasionally seems to snap to full extension when bouncing which looks very wierd. Your wheel visuals work fine so I hacked in a bit of code to get me the normalized spring length and this works absolutely fine: public float GetNormalizedSpringLength() { return spring.length / spring.maxLength; } I'm guessing there must be a state in which springCompression is being set incorrectly but for some reason the spring.length is always fine??

    Other than that though the latest version does feel like a big improvement. Keep up the great work.

    Cheers,
    Chris
     
  14. RemexChris

    RemexChris

    Joined:
    Aug 4, 2015
    Posts:
    16
    Hi NWHCoding,

    Another bug -

    I have a basic brakeTorque of 10 always being applied to simulate drive train losses. When I brake hard I apply a brake torque of 700.

    If vehicle becomes airborne with brakeTorque at 10 the wheel will slowly come to a stop as expected. If however the wheel has stopped spinning and I then brake (apply a brakeTorque of 700) whilst still airborne, the wheels remain stationary, but when I release the brake and the brakeTorque then returns to 10 the wheels start spinning backwards forever (until it hits the ground).

    Edit - Looks like it's this:
    (A quick hack to only call this when hasHit solves the problem (although I never use MotorTorque))
    Code (csharp):
    1.  
    2. // Calculate residual (wheel-spinning) force that could not be put to ground
    3.         var residualForce = 0.0f;
    4.         if (Mathf.Abs(combinedForce) > Mathf.Abs(availableForwardForce))
    5.             residualForce = Mathf.Sign(combinedForce) * (Mathf.Abs(combinedForce) - Mathf.Abs(availableForwardForce));
    6.         wheel.residualAngularVelocity = ((residualForce * wheel.tireRadius) / wheel.inertia) * Time.fixedDeltaTime;
    7.  

    Thanks,
    Chris
     
    Last edited: Jan 26, 2017
  15. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    I will look into it, but springCompression should return what you need. Looking into code it is effectively 1f - (spring.availableLength / spring.maxLength); in v1.4. That will go to 1 if the vehicle is either not hitting ground or tipped over.

    Version 1.5 is coming out in a few days and will solve a problem with one-frame-late calculation of wheel world position which might fix your problem along the way. Send me a mail and I will send updated version to you.
     
  16. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    Wow, that is one specific bug you got there. Glad you informed me about this.

    Regards,
    Aron
     
  17. RemexChris

    RemexChris

    Joined:
    Aug 4, 2015
    Posts:
    16
    I have your wheel controllers strapped to an aircraft :)
     
  18. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    Oh my. Explains some things I guess...

    Also, v1.5 is out.
     
    Last edited: Jan 26, 2017
  19. Stridemann

    Stridemann

    Joined:
    Oct 12, 2013
    Posts:
    242
    Hi, I just bought this asset. It's very simple to setup it even in a big project and I like it. Thanks)

    But I got a problem with layers (layer #20). That is not good way for me coz all my vehicles has own layers (Enemy, Ally, etc.) also not only the car should be ignored.
    As I saw in code this layermask is defined as local var in WheelScan function, so I can suggest to move it as variable, so users can override/set it manually.
    It's not a problem for me to remake it for my project (also my modification of it will be broken after asset update), just want you keep in mind this problem.

    Cheers.

    I'm still reading the documentation and trying to fix a problem with jittery wheels in some positions.
    UPD. The problem was in layermask.
     
    Last edited: Feb 18, 2017
  20. Stridemann

    Stridemann

    Joined:
    Oct 12, 2013
    Posts:
    242
    Code (CSharp):
    1. rimCollider.radius = tireRadius * 0.5f;
    I suppose the radius of rim collider will be as Rim Radius parameter. I have 0.63 wheel and rim should be 0.4 for it, so I made modification:
    Code (CSharp):
    1. rimCollider.radius = rimRadius;
    I hope it doesn't break any part of physics.
     
    Last edited: Feb 18, 2017
  21. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    I already got the suggestion with the layermask so I will update as soon as I get from the trip as I am on the mobile at the moment, that should be on monday plus some time for it to get approved.

    As for the radius, that one certainly will not break anything as that is how it should be and will also be cirrected. Either one will not break the physics.

    Next update will also get adjustable side offset for the wheel as one user pointed that it would be nice to have wheels not turn directly around their y axis. This one is already implemented so if anybody needs it earlier I can PM it to anybody that may need it sooner.
     
    Stridemann likes this.
  22. Stridemann

    Stridemann

    Joined:
    Oct 12, 2013
    Posts:
    242
    Ok, I just setup this asset on 27 different vehicles:
    4 wheel cars (SLAMRAAM),
    6/8 wheels APC (Armoured Personnel Carrier) (animation controller suspension),
    12/14 wheel tanks (also Stridsvagn 103 with dynamic suspension),
    3 wheels fighter aircrafts
    Archer Artillery System

    Unfortunately I can't show the video, but I can say they works more than good.

    I had problems on aircraft with rim collider (capsule collider), because my aircraft receive damage from collision, so it always get destroyed while landing. So I made an option to disable all rim colliders. Also I add a force if some collider pass through ground (raycast check). And now it works fine for me.

    One more thing- spawning the wheel controllers. I have a wheel prefab (with wheel controller) for 14 wheel tank, so I should set the Parent value of wheel controller before spawning it because there will be an error coz parent is used in Awake function of controller.

    +layermask that I was talking about later. After setting up custom layermask- all the problems is gone.

    One annoying thing thould be fixed (I think) is a visual debug in editor. It doesn't work until the Wheel Visual is not set in inspector. I don't use visual wheels, so I should enter play mode to setup the wheel, then stop the game end make changes in inspector again.

    Cheers :)
     
  23. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    Thank you for your feedback!
    I love feedback like this since it gives me ideas about how to improve things.
    Will add those complaints and suggestions to the v1.7 to-do list.

    Custom layermask was added in v1.6 from yesterday.
    I will check out the visual debug, shouldn't be more than few lines. Wheel visuals use wheel.worldPosition and wheel.worldRotation anyways so this is more of a "bug" than anything else. Should be as simple as replacing positions of visuals with wheel.worldPosition and worldRotation variables.

    Regards,
    Aron
     
    Stridemann likes this.
  24. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    Short demo video for version 1.6:
     
    wetcircuit, jmjd and Stridemann like this.
  25. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    New update on the way (v1.7). Changes:
    - Option to disable rim collider.
    - Optimization (about 20% performance increase).
    - Bug fix with slip in reverse being to high (bug from v1.6).
    - Tweaked default Tarmac curves.
     
  26. eddyjohnson3

    eddyjohnson3

    Joined:
    Jul 27, 2012
    Posts:
    36
    Great package, recently purchased this and its pretty awesome.

    One problem I have though is that if the vehicle is parked on a slope even with Tarmac Dry friction, it is still slowly sliding downhill... This means you can not realisticaly stop/park the vehicle on sloped surfaces with hight friction. Or maybe I am doing something wrong?
     
  27. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    No, it's not you. I will address this problem (not bug) in v1.8 but I am not sure that it will ever go away completely (try parking Unity's wheelcollider on the slope sideways and guess what will happen) but I will try to minimize it.
    Problem is in calculation being reactive meaning that wheel slip has first to happen for me to react. Inbuilt wheelcollider hides this a bit better since they have much higher time step internally so they can react faster if they want (I have to wait for the next fixed update).
    There are some *ugly* tricks to get a vehicle to be completely still that I saw people implement, such as checking if vehicle is under brakes and it's velocity is near zero and then setting Rigidbody.velocity to Vector3.zero - but that will not work in cases of collision, etc.

    Hope the explanation will be helpful :).
     
  28. eddyjohnson3

    eddyjohnson3

    Joined:
    Jul 27, 2012
    Posts:
    36
    OK, thanks for that info. I will figure out some workaround then... Still an awesome package :)
     
    NWHCoding likes this.
  29. juliocdep

    juliocdep

    Joined:
    Sep 30, 2010
    Posts:
    25
    I did this question on youtube videos, but I think here is betters.

    It's possible to use this wheel collider in a block building game (like Besiege), where I can construct a vehicle with N numbers of wheel dynamic?
     
  30. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    Hello and sory for missing your question. I do check the YouTube channel but their notification system likes to leave things out apparently.

    You could use WheelController in such a game but there are some minor things that might need adapting. WC3D works in all positions and rotations, but only the bottom of the wheel is doing the actual detection, so you might want to add a conventional collider or use the provided auto generated rim collider to handle hits from the side or the bottom.
    If you find any problem while implementing it, send me an email and I will try to help.
     
  31. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    Update 1.8 has been submitted for review and will be out in a few days.
    Changes:
    - Reworked editor that now works properly when multi-editing objects.
    - Greatly reduced sideways creep on angled surfaces (not eliminated).
    - Fixed bugs when creating a new WheelController from script.
    - Changed wheel inertia to not be dependent on rim size (only tire size).
     
  32. GillesVermeulen

    GillesVermeulen

    Joined:
    Dec 23, 2013
    Posts:
    3
    Hey NWHCoding, would this controller also work for 2 wheeled vehicles/bikes?
     
  33. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    Yes, there were two people that I know of that used it that way - one of them left the review on the asset site (he had problems but not due to the WC3D).
    There are two setting to be set: "Single Wheel" and "Side-to-side resolution" to 1 and you are good to go.
     
  34. Meltdown

    Meltdown

    Joined:
    Oct 13, 2010
    Posts:
    5,420
    How is performance on mobile on low-end devices? I want to have 4 vehicles in a race. I've found most packages with 4 vehicles cause big problems on mobile on the lower-end.

    Also, if I bought your package, how would you recommend implementing a nitro boost, and being able to set the acceleration?

    Thanks
     
  35. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    I think you misunderstood the point of this package. This is not a vehicle script (gearshifing, nitro, effects, etc.). This is esentially what inbuilt WheelCollider does but improved and three dimensional.

    Ground detection resolution is customizable so it can work with all devices.
     
  36. Meltdown

    Meltdown

    Joined:
    Oct 13, 2010
    Posts:
    5,420
    I understand that, I was just asking your opinion on implementing these.

    I'll purchase now and I'll come back with some benchmarks from testing 4 vehicles in a scene on my low-end mobile device.

    One more question, is it possible to adjust the sideways friction of individual tyres, or can it only be surface based?
     
  37. Meltdown

    Meltdown

    Joined:
    Oct 13, 2010
    Posts:
    5,420
    Mobile performance stamp approved!

    Testing 4 vehicles on my low-end Android device in the demo scene, I get 40-47 FPS, which is good compared to other vehicle packages performance.

    This is with all materials set to mobile/diffuse.
     
  38. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    I did take care about performance when making the asset and am glad it shows, but you have to take into account that performance is entirely up to the developer as the scan resolution can be set from 1 which would be the same as the default wheelcollider and also the fastest up to whatever number you want.
     
  39. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    One note for those that might want to use this script with pre 5.5 Unity. Script will work with the older versions (I cannot guarantee each version, but 5+ should be OK) but be careful about using the provided demo models and prefabs; if you move them from 5.5 to any previous Unity version it seems that they get bugged in some way that is not visible to the eye but physics will not work properly. So it would be best if you used your own models in this case.

    Just a heads-up so you do not spend a few hours on this as I did :)
     
  40. strich

    strich

    Joined:
    Aug 14, 2012
    Posts:
    278
    Hi @NWHCoding - Your plugin looks fantastic. I was wondering if you could tell me a bit about how stable it is on top of other dynamic physics colliders? For example:
    1. A terrain that is modified from under the wheels.
    2. A suspended bridge with moving parts.
    4. Active rocks/logs.
     
    NWHCoding likes this.
  41. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    For this, you will need to add following lines after line 522 in WheelController.cs. This was supposed to be in the v1.6 but apparently did not end in the proper branch on git:

    // Apply force to the ground
    Rigidbody hitRb;
    if (hitRb = hit.collider.GetComponent<Rigidbody>())
    {
    hitRb.AddForceAtPosition(-forceSum, hit.point);
    }
    This will apply force to the object below the vehicle in case it has a rigidbody. This will work with larger objects such as a see-saw and larger rocks, but smaller objects and those with springy properties (like a bridge) can cause the collider to oscillate due to the way forces and rigidbodies work ( large force like the weight of the vehicle + light rigidbody = unstable physics).
     
    strich likes this.
  42. Tonismo

    Tonismo

    Joined:
    Oct 7, 2016
    Posts:
    29
    In Unity WheelColliders,I was able to set ride height using WheelCollider.center ,Does wheel Controller have this variable?Can you make a post of all of Wheel Controllers Api?Also What exactly is the significance of Rims Radius vs Radius as far as affect ride quality?In real life,the larger TiresRadius over Rims Radius equates to softer less stiffer ride.
     
  43. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    In WC3D there is no target spring length and so the ride height is adjusted by changing spring length, spring stiffness or moving the object WC3D is attached to.

    Rim radius is just what it says, and tire radius is the radius of the complete wheel. Rim radius is used just for creating capsule colliders which are there just for collisions from the side - e.g. when the vehicle is rolled over, they do the colision work. Rim colliders do not change anything related to the ride quality.

    Here is the auto-generated API reference: https://yadi.sk/i/JYDJaQjE3JwrXy
     
  44. Tonismo

    Tonismo

    Joined:
    Oct 7, 2016
    Posts:
    29
    Thanks NWHCoding for help.I was able to set the spring length before the game start and it runs find when play.But during runtime ,I tried to change ride height and it gives me a crap load of errors.Any ideas guys on fixing this?This is very important because in my game I need tochange ride height as a modificatiin feature. Project 1.png Project 1_2.png Project 1_1.png
     
  45. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    I just set up a test script and it seems to work OK. I attached the script and video below.
    One thing that might be the problem is setting the spring length to 0 or very close to 0 which would result in division by zero, and this is what your example looks like. If you need your wheels to look like in the last picture, simply move the WC3Ds a bit up in the editor and use e.g. 0.1 spring length for your minimum value.

    Also, faster and better way to contact me about support would be through email, as I cannot paste any code from the actual package in here for obvious reasons.

     

    Attached Files:

    • Test.cs
      File size:
      477 bytes
      Views:
      404
  46. Tonismo

    Tonismo

    Joined:
    Oct 7, 2016
    Posts:
    29
    Thanks NWHCoding! Yes the issue came from typing in 0 for spring.length during runtime. This is a really good asset,Unity should really make this asset their standard. 1)When I set Spring Length to .9,I notice all four wheels are jittering ,why is that?
    2)Why do you have to set a layermask to use for Ground Scan?Cant you just emplement where the Wheel Controller ignores all colliders that are child of Parent?
     
    Last edited: Jun 10, 2017
  47. Pucelano

    Pucelano

    Joined:
    Mar 10, 2015
    Posts:
    7
    Hi,
    I bought this asset two weeks ago. I must say that this is a great asset if you need a wheel controller for a game where you drive on regular terrains, but I´m working in a off-road game and I´m having problems than I can´t fix.. The problem become when the side of any wheel enter inside the vertex of any irregular objet, when the vehicle is tilted o when it skids... It makes that the wheel jumps with a strong force because the raycast system think that has enter in contact with a vertical bump. Are you working for fix? Thank you very much.
     
  48. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    Have you enabled the rim collider? If you use it with the terrain where side hits might be possible it is best to enable them.

    I will look into the problem.
     
    Last edited: Jul 14, 2017
  49. Pucelano

    Pucelano

    Joined:
    Mar 10, 2015
    Posts:
    7
    Thanks for your fast response. Yes, I have enabled the rim collider but although the problem is lower it doesn´t eliminate it. I have represented the problem and a possible solition in the following drawing. What about it?
    upload_2017-7-14_15-36-25.png
     
  50. NWHCoding

    NWHCoding

    Joined:
    Jul 12, 2012
    Posts:
    773
    Thank your for the drawing. I am making a solution at the moment (and have been for the past few hours).
    If it was as simple as the above the whole asset could be a lot simple as I could simply use Cylinder Collider (Cylinder Cast) to detect ground as colliders return the hit point. But there is one big BUT and that is:
    It is 2017 and Unity still does not have a cylinder collider.
    ^ If anybody from Unity sees this please do implement one. Sadly that will probably not happen since Nvidia Physix doesn't have one.
    So long story short the whole ground detection thingie in this asset (about 250 lines of it) is dedicated to emulating an imaginative CylinderCast. I am testing different solutions at the moment to improve the behavior and will be posting the update ASAP.