Repository files navigation

KSPWheel

Replacement for U4 wheel collider, geared for use in KSP.

Features:

  • Simple Component driven wheel collider system.
  • Multiple WheelColliders may be added to any model hierarchy or single game object.
  • Wheel colliders have no limitations on their orientation.
  • Wheel colliders may add forces to an arbitrary specified rigidbody, not necessarily the one closest to their parentage.
  • Wheel colliders may be easily enabled/disabled.
  • Wheel colliders may have -any- and -all- parameters changed during run-time, without any unexpected side effects.
  • Wheel collider physics updates are manually issued by the controller class, so all update ordering can be user controlled
    • Can optionally be set to 'auto-update', in which case it will fire updates in its own FixedUpdate
  • Configurable suspension sweep type - simple raycast (fastest, least accurate), sphere-cast (fast, very accurate for wide wheels), or compound capsule-cast (not as fast as the others, but potentially very accurate)
  • Configurable friction curves to simulate various tire types and properties.
  • Static friction ensures there is no unwanted sliding.
  • Supports 'zero-length' suspension setups by using stand-in colliders with standard friction.
    • Most other wheel functions will be disabled (motor, brakes, steering) as no friction force information is available.
    • Intended for use as a toggle on landing legs, but might have use on some wheels as well.
    • WIP -- Investigating solutions to calculate friction for solid suspension setups, which would allow for steering/motors/etc.

Typical Use:

  • Requires one or more user supplied 'Vehicle Controller' scripts/components to enable/disable colliders, sample input states, and update wheel torque/brake status. This script could function on a per-part or per-vehicle basis, depending upon user needs.
    • This script can manage one or more wheel colliders.
    • For use in KSP the VehicleController script should remove any U5 WheelColliders and replace them with the KSPWheelCollider component.
    • A fully functional set of PartModules for KSP are included that should be configurable for most wheels.
  • WheelCollider is responsible for all physics updating, managing sticky friction, bump-stop handling.
  • Several parameters require updating on every tick if they vary from the defaults; these should be set prior to the wheelCollider.updatePhysics() method being called:
    • brake torque
    • motor torque
    • steering angle
    • local gravity
  • Uses manual-update methods -- allows for grouping and batching of wheelCollider updates when multiple wheels are on the same part/vessel.

Setup:

  • Add KSPWheelCollider component to a game-object; either through the Editor, or at runtime.
  • Setup the following fields on the new WheelCollider (mandatory, needed for basic functionality):
    • rigidbody -- the rigidbody to apply forces to. MUST be setup or the wheels will have no effect.Defaults to 'false', requiring external update calls.
  • Optionally setup the following fields on the WheelCollider:
    • preUpdateAction - the pre-update callback (optional)
    • postUpdateAction - the post-update callback (optional)
    • autoUpdate - should wheelcollider update itself in FixedUpdate, or rely on manual external update calls?
    • friction curves
    • friction coefficients
    • suspensionSpring
    • suspensionDamper
    • wheelRadius
    • wheelMass
    • suspensionSweepType -- ray, sphere, capsule (WIP, working but needs additional options for CAPSULE type)
    • physicsModel -- standard, alternate1, alternate2 (WIP, Not yet implemented)
  • On every physics update the controller script should update the following fields either prior to calling the wheelCollider.physicsUpdate() method, or in the pre-update callback (if they have changed from previously set values):
    • gravity vector
    • motor torque
    • brake torque
    • steering angle

Source Code License

Source code for this project is currently licensed under GPL3.0 (or later). Please see the accompanying License-GPL3.txt file for full licensing details. Or alternatively the license may be viewed online at https://www.gnu.org/licenses/gpl-3.0.txt

Configs Licensing

Config files, if applicable, are hereby released into the Public Domain, and are free to be used, altered, and redistributed.

Example Assets

Assets included in this project are for academic purposes only and are not intended for redistribution in any format.
The Car model and textures were taken from the Unity 3 Wheel/Vehicle Sample asset package.
Grass texture for terrain is a freely available online and were noted to be free to use for public and commercial purposes.
Any other assets are the property of the respective Authors and their respective licenses must be consulted prior to any redistribution or re-use.

About

Replacement for U4 wheel collider, geared for use in KSP.

Resources

Stars

43 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

KSPWheel

Replacement for U4 wheel collider, geared for use in KSP.

Features:

  • Simple Component driven wheel collider system.
  • Multiple WheelColliders may be added to any model hierarchy or single game object.
  • Wheel colliders have no limitations on their orientation.
  • Wheel colliders may add forces to an arbitrary specified rigidbody, not necessarily the one closest to their parentage.
  • Wheel colliders may be easily enabled/disabled.
  • Wheel colliders may have -any- and -all- parameters changed during run-time, without any unexpected side effects.
  • Wheel collider physics updates are manually issued by the controller class, so all update ordering can be user controlled
    • Can optionally be set to 'auto-update', in which case it will fire updates in its own FixedUpdate
  • Configurable suspension sweep type - simple raycast (fastest, least accurate), sphere-cast (fast, very accurate for wide wheels), or compound capsule-cast (not as fast as the others, but potentially very accurate)
  • Configurable friction curves to simulate various tire types and properties.
  • Static friction ensures there is no unwanted sliding.
  • Supports 'zero-length' suspension setups by using stand-in colliders with standard friction.
    • Most other wheel functions will be disabled (motor, brakes, steering) as no friction force information is available.
    • Intended for use as a toggle on landing legs, but might have use on some wheels as well.
    • WIP -- Investigating solutions to calculate friction for solid suspension setups, which would allow for steering/motors/etc.

Typical Use:

  • Requires one or more user supplied 'Vehicle Controller' scripts/components to enable/disable colliders, sample input states, and update wheel torque/brake status. This script could function on a per-part or per-vehicle basis, depending upon user needs.
    • This script can manage one or more wheel colliders.
    • For use in KSP the VehicleController script should remove any U5 WheelColliders and replace them with the KSPWheelCollider component.
    • A fully functional set of PartModules for KSP are included that should be configurable for most wheels.
  • WheelCollider is responsible for all physics updating, managing sticky friction, bump-stop handling.
  • Several parameters require updating on every tick if they vary from the defaults; these should be set prior to the wheelCollider.updatePhysics() method being called:
    • brake torque
    • motor torque
    • steering angle
    • local gravity
  • Uses manual-update methods -- allows for grouping and batching of wheelCollider updates when multiple wheels are on the same part/vessel.

Setup:

  • Add KSPWheelCollider component to a game-object; either through the Editor, or at runtime.
  • Setup the following fields on the new WheelCollider (mandatory, needed for basic functionality):
    • rigidbody -- the rigidbody to apply forces to. MUST be setup or the wheels will have no effect.Defaults to 'false', requiring external update calls.
  • Optionally setup the following fields on the WheelCollider:
    • preUpdateAction - the pre-update callback (optional)
    • postUpdateAction - the post-update callback (optional)
    • autoUpdate - should wheelcollider update itself in FixedUpdate, or rely on manual external update calls?
    • friction curves
    • friction coefficients
    • suspensionSpring
    • suspensionDamper
    • wheelRadius
    • wheelMass
    • suspensionSweepType -- ray, sphere, capsule (WIP, working but needs additional options for CAPSULE type)
    • physicsModel -- standard, alternate1, alternate2 (WIP, Not yet implemented)
  • On every physics update the controller script should update the following fields either prior to calling the wheelCollider.physicsUpdate() method, or in the pre-update callback (if they have changed from previously set values):
    • gravity vector
    • motor torque
    • brake torque
    • steering angle

Source Code License

Source code for this project is currently licensed under GPL3.0 (or later). Please see the accompanying License-GPL3.txt file for full licensing details. Or alternatively the license may be viewed online at https://www.gnu.org/licenses/gpl-3.0.txt

Configs Licensing

Config files, if applicable, are hereby released into the Public Domain, and are free to be used, altered, and redistributed.

Example Assets

Assets included in this project are for academic purposes only and are not intended for redistribution in any format.
The Car model and textures were taken from the Unity 3 Wheel/Vehicle Sample asset package.
Grass texture for terrain is a freely available online and were noted to be free to use for public and commercial purposes.
Any other assets are the property of the respective Authors and their respective licenses must be consulted prior to any redistribution or re-use.

About

Replacement for U4 wheel collider, geared for use in KSP.

Resources

Stars

43 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

KSPWheel

Replacement for U4 wheel collider, geared for use in KSP.

Features:

  • Simple Component driven wheel collider system.
  • Multiple WheelColliders may be added to any model hierarchy or single game object.
  • Wheel colliders have no limitations on their orientation.
  • Wheel colliders may add forces to an arbitrary specified rigidbody, not necessarily the one closest to their parentage.
  • Wheel colliders may be easily enabled/disabled.
  • Wheel colliders may have -any- and -all- parameters changed during run-time, without any unexpected side effects.
  • Wheel collider physics updates are manually issued by the controller class, so all update ordering can be user controlled
    • Can optionally be set to 'auto-update', in which case it will fire updates in its own FixedUpdate
  • Configurable suspension sweep type - simple raycast (fastest, least accurate), sphere-cast (fast, very accurate for wide wheels), or compound capsule-cast (not as fast as the others, but potentially very accurate)
  • Configurable friction curves to simulate various tire types and properties.
  • Static friction ensures there is no unwanted sliding.
  • Supports 'zero-length' suspension setups by using stand-in colliders with standard friction.
    • Most other wheel functions will be disabled (motor, brakes, steering) as no friction force information is available.
    • Intended for use as a toggle on landing legs, but might have use on some wheels as well.
    • WIP -- Investigating solutions to calculate friction for solid suspension setups, which would allow for steering/motors/etc.

Typical Use:

  • Requires one or more user supplied 'Vehicle Controller' scripts/components to enable/disable colliders, sample input states, and update wheel torque/brake status. This script could function on a per-part or per-vehicle basis, depending upon user needs.
    • This script can manage one or more wheel colliders.
    • For use in KSP the VehicleController script should remove any U5 WheelColliders and replace them with the KSPWheelCollider component.
    • A fully functional set of PartModules for KSP are included that should be configurable for most wheels.
  • WheelCollider is responsible for all physics updating, managing sticky friction, bump-stop handling.
  • Several parameters require updating on every tick if they vary from the defaults; these should be set prior to the wheelCollider.updatePhysics() method being called:
    • brake torque
    • motor torque
    • steering angle
    • local gravity
  • Uses manual-update methods -- allows for grouping and batching of wheelCollider updates when multiple wheels are on the same part/vessel.

Setup:

  • Add KSPWheelCollider component to a game-object; either through the Editor, or at runtime.
  • Setup the following fields on the new WheelCollider (mandatory, needed for basic functionality):
    • rigidbody -- the rigidbody to apply forces to. MUST be setup or the wheels will have no effect.Defaults to 'false', requiring external update calls.
  • Optionally setup the following fields on the WheelCollider:
    • preUpdateAction - the pre-update callback (optional)
    • postUpdateAction - the post-update callback (optional)
    • autoUpdate - should wheelcollider update itself in FixedUpdate, or rely on manual external update calls?
    • friction curves
    • friction coefficients
    • suspensionSpring
    • suspensionDamper
    • wheelRadius
    • wheelMass
    • suspensionSweepType -- ray, sphere, capsule (WIP, working but needs additional options for CAPSULE type)
    • physicsModel -- standard, alternate1, alternate2 (WIP, Not yet implemented)
  • On every physics update the controller script should update the following fields either prior to calling the wheelCollider.physicsUpdate() method, or in the pre-update callback (if they have changed from previously set values):
    • gravity vector
    • motor torque
    • brake torque
    • steering angle

Source Code License

Source code for this project is currently licensed under GPL3.0 (or later). Please see the accompanying License-GPL3.txt file for full licensing details. Or alternatively the license may be viewed online at https://www.gnu.org/licenses/gpl-3.0.txt

Configs Licensing

Config files, if applicable, are hereby released into the Public Domain, and are free to be used, altered, and redistributed.

Example Assets

Assets included in this project are for academic purposes only and are not intended for redistribution in any format.
The Car model and textures were taken from the Unity 3 Wheel/Vehicle Sample asset package.
Grass texture for terrain is a freely available online and were noted to be free to use for public and commercial purposes.
Any other assets are the property of the respective Authors and their respective licenses must be consulted prior to any redistribution or re-use.

About

Replacement for U4 wheel collider, geared for use in KSP.

Resources

Stars

43 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

KSPWheel

Replacement for U4 wheel collider, geared for use in KSP.

Features:

  • Simple Component driven wheel collider system.
  • Multiple WheelColliders may be added to any model hierarchy or single game object.
  • Wheel colliders have no limitations on their orientation.
  • Wheel colliders may add forces to an arbitrary specified rigidbody, not necessarily the one closest to their parentage.
  • Wheel colliders may be easily enabled/disabled.
  • Wheel colliders may have -any- and -all- parameters changed during run-time, without any unexpected side effects.
  • Wheel collider physics updates are manually issued by the controller class, so all update ordering can be user controlled
    • Can optionally be set to 'auto-update', in which case it will fire updates in its own FixedUpdate
  • Configurable suspension sweep type - simple raycast (fastest, least accurate), sphere-cast (fast, very accurate for wide wheels), or compound capsule-cast (not as fast as the others, but potentially very accurate)
  • Configurable friction curves to simulate various tire types and properties.
  • Static friction ensures there is no unwanted sliding.
  • Supports 'zero-length' suspension setups by using stand-in colliders with standard friction.
    • Most other wheel functions will be disabled (motor, brakes, steering) as no friction force information is available.
    • Intended for use as a toggle on landing legs, but might have use on some wheels as well.
    • WIP -- Investigating solutions to calculate friction for solid suspension setups, which would allow for steering/motors/etc.

Typical Use:

  • Requires one or more user supplied 'Vehicle Controller' scripts/components to enable/disable colliders, sample input states, and update wheel torque/brake status. This script could function on a per-part or per-vehicle basis, depending upon user needs.
    • This script can manage one or more wheel colliders.
    • For use in KSP the VehicleController script should remove any U5 WheelColliders and replace them with the KSPWheelCollider component.
    • A fully functional set of PartModules for KSP are included that should be configurable for most wheels.
  • WheelCollider is responsible for all physics updating, managing sticky friction, bump-stop handling.
  • Several parameters require updating on every tick if they vary from the defaults; these should be set prior to the wheelCollider.updatePhysics() method being called:
    • brake torque
    • motor torque
    • steering angle
    • local gravity
  • Uses manual-update methods -- allows for grouping and batching of wheelCollider updates when multiple wheels are on the same part/vessel.

Setup:

  • Add KSPWheelCollider component to a game-object; either through the Editor, or at runtime.
  • Setup the following fields on the new WheelCollider (mandatory, needed for basic functionality):
    • rigidbody -- the rigidbody to apply forces to. MUST be setup or the wheels will have no effect.Defaults to 'false', requiring external update calls.
  • Optionally setup the following fields on the WheelCollider:
    • preUpdateAction - the pre-update callback (optional)
    • postUpdateAction - the post-update callback (optional)
    • autoUpdate - should wheelcollider update itself in FixedUpdate, or rely on manual external update calls?
    • friction curves
    • friction coefficients
    • suspensionSpring
    • suspensionDamper
    • wheelRadius
    • wheelMass
    • suspensionSweepType -- ray, sphere, capsule (WIP, working but needs additional options for CAPSULE type)
    • physicsModel -- standard, alternate1, alternate2 (WIP, Not yet implemented)
  • On every physics update the controller script should update the following fields either prior to calling the wheelCollider.physicsUpdate() method, or in the pre-update callback (if they have changed from previously set values):
    • gravity vector
    • motor torque
    • brake torque
    • steering angle

Source Code License

Source code for this project is currently licensed under GPL3.0 (or later). Please see the accompanying License-GPL3.txt file for full licensing details. Or alternatively the license may be viewed online at https://www.gnu.org/licenses/gpl-3.0.txt

Configs Licensing

Config files, if applicable, are hereby released into the Public Domain, and are free to be used, altered, and redistributed.

Example Assets

Assets included in this project are for academic purposes only and are not intended for redistribution in any format.
The Car model and textures were taken from the Unity 3 Wheel/Vehicle Sample asset package.
Grass texture for terrain is a freely available online and were noted to be free to use for public and commercial purposes.
Any other assets are the property of the respective Authors and their respective licenses must be consulted prior to any redistribution or re-use.

About

Replacement for U4 wheel collider, geared for use in KSP.

Resources

Stars

43 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

KSPWheel

Replacement for U4 wheel collider, geared for use in KSP.

Features:

  • Simple Component driven wheel collider system.
  • Multiple WheelColliders may be added to any model hierarchy or single game object.
  • Wheel colliders have no limitations on their orientation.
  • Wheel colliders may add forces to an arbitrary specified rigidbody, not necessarily the one closest to their parentage.
  • Wheel colliders may be easily enabled/disabled.
  • Wheel colliders may have -any- and -all- parameters changed during run-time, without any unexpected side effects.
  • Wheel collider physics updates are manually issued by the controller class, so all update ordering can be user controlled
    • Can optionally be set to 'auto-update', in which case it will fire updates in its own FixedUpdate
  • Configurable suspension sweep type - simple raycast (fastest, least accurate), sphere-cast (fast, very accurate for wide wheels), or compound capsule-cast (not as fast as the others, but potentially very accurate)
  • Configurable friction curves to simulate various tire types and properties.
  • Static friction ensures there is no unwanted sliding.
  • Supports 'zero-length' suspension setups by using stand-in colliders with standard friction.
    • Most other wheel functions will be disabled (motor, brakes, steering) as no friction force information is available.
    • Intended for use as a toggle on landing legs, but might have use on some wheels as well.
    • WIP -- Investigating solutions to calculate friction for solid suspension setups, which would allow for steering/motors/etc.

Typical Use:

  • Requires one or more user supplied 'Vehicle Controller' scripts/components to enable/disable colliders, sample input states, and update wheel torque/brake status. This script could function on a per-part or per-vehicle basis, depending upon user needs.
    • This script can manage one or more wheel colliders.
    • For use in KSP the VehicleController script should remove any U5 WheelColliders and replace them with the KSPWheelCollider component.
    • A fully functional set of PartModules for KSP are included that should be configurable for most wheels.
  • WheelCollider is responsible for all physics updating, managing sticky friction, bump-stop handling.
  • Several parameters require updating on every tick if they vary from the defaults; these should be set prior to the wheelCollider.updatePhysics() method being called:
    • brake torque
    • motor torque
    • steering angle
    • local gravity
  • Uses manual-update methods -- allows for grouping and batching of wheelCollider updates when multiple wheels are on the same part/vessel.

Setup:

  • Add KSPWheelCollider component to a game-object; either through the Editor, or at runtime.
  • Setup the following fields on the new WheelCollider (mandatory, needed for basic functionality):
    • rigidbody -- the rigidbody to apply forces to. MUST be setup or the wheels will have no effect.Defaults to 'false', requiring external update calls.
  • Optionally setup the following fields on the WheelCollider:
    • preUpdateAction - the pre-update callback (optional)
    • postUpdateAction - the post-update callback (optional)
    • autoUpdate - should wheelcollider update itself in FixedUpdate, or rely on manual external update calls?
    • friction curves
    • friction coefficients
    • suspensionSpring
    • suspensionDamper
    • wheelRadius
    • wheelMass
    • suspensionSweepType -- ray, sphere, capsule (WIP, working but needs additional options for CAPSULE type)
    • physicsModel -- standard, alternate1, alternate2 (WIP, Not yet implemented)
  • On every physics update the controller script should update the following fields either prior to calling the wheelCollider.physicsUpdate() method, or in the pre-update callback (if they have changed from previously set values):
    • gravity vector
    • motor torque
    • brake torque
    • steering angle

Source Code License

Source code for this project is currently licensed under GPL3.0 (or later). Please see the accompanying License-GPL3.txt file for full licensing details. Or alternatively the license may be viewed online at https://www.gnu.org/licenses/gpl-3.0.txt

Configs Licensing

Config files, if applicable, are hereby released into the Public Domain, and are free to be used, altered, and redistributed.

Example Assets

Assets included in this project are for academic purposes only and are not intended for redistribution in any format.
The Car model and textures were taken from the Unity 3 Wheel/Vehicle Sample asset package.
Grass texture for terrain is a freely available online and were noted to be free to use for public and commercial purposes.
Any other assets are the property of the respective Authors and their respective licenses must be consulted prior to any redistribution or re-use.

About

Replacement for U4 wheel collider, geared for use in KSP.

Resources

Stars

43 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

KSPWheel

Replacement for U4 wheel collider, geared for use in KSP.

Features:

  • Simple Component driven wheel collider system.
  • Multiple WheelColliders may be added to any model hierarchy or single game object.
  • Wheel colliders have no limitations on their orientation.
  • Wheel colliders may add forces to an arbitrary specified rigidbody, not necessarily the one closest to their parentage.
  • Wheel colliders may be easily enabled/disabled.
  • Wheel colliders may have -any- and -all- parameters changed during run-time, without any unexpected side effects.
  • Wheel collider physics updates are manually issued by the controller class, so all update ordering can be user controlled
    • Can optionally be set to 'auto-update', in which case it will fire updates in its own FixedUpdate
  • Configurable suspension sweep type - simple raycast (fastest, least accurate), sphere-cast (fast, very accurate for wide wheels), or compound capsule-cast (not as fast as the others, but potentially very accurate)
  • Configurable friction curves to simulate various tire types and properties.
  • Static friction ensures there is no unwanted sliding.
  • Supports 'zero-length' suspension setups by using stand-in colliders with standard friction.
    • Most other wheel functions will be disabled (motor, brakes, steering) as no friction force information is available.
    • Intended for use as a toggle on landing legs, but might have use on some wheels as well.
    • WIP -- Investigating solutions to calculate friction for solid suspension setups, which would allow for steering/motors/etc.

Typical Use:

  • Requires one or more user supplied 'Vehicle Controller' scripts/components to enable/disable colliders, sample input states, and update wheel torque/brake status. This script could function on a per-part or per-vehicle basis, depending upon user needs.
    • This script can manage one or more wheel colliders.
    • For use in KSP the VehicleController script should remove any U5 WheelColliders and replace them with the KSPWheelCollider component.
    • A fully functional set of PartModules for KSP are included that should be configurable for most wheels.
  • WheelCollider is responsible for all physics updating, managing sticky friction, bump-stop handling.
  • Several parameters require updating on every tick if they vary from the defaults; these should be set prior to the wheelCollider.updatePhysics() method being called:
    • brake torque
    • motor torque
    • steering angle
    • local gravity
  • Uses manual-update methods -- allows for grouping and batching of wheelCollider updates when multiple wheels are on the same part/vessel.

Setup:

  • Add KSPWheelCollider component to a game-object; either through the Editor, or at runtime.
  • Setup the following fields on the new WheelCollider (mandatory, needed for basic functionality):
    • rigidbody -- the rigidbody to apply forces to. MUST be setup or the wheels will have no effect.Defaults to 'false', requiring external update calls.
  • Optionally setup the following fields on the WheelCollider:
    • preUpdateAction - the pre-update callback (optional)
    • postUpdateAction - the post-update callback (optional)
    • autoUpdate - should wheelcollider update itself in FixedUpdate, or rely on manual external update calls?
    • friction curves
    • friction coefficients
    • suspensionSpring
    • suspensionDamper
    • wheelRadius
    • wheelMass
    • suspensionSweepType -- ray, sphere, capsule (WIP, working but needs additional options for CAPSULE type)
    • physicsModel -- standard, alternate1, alternate2 (WIP, Not yet implemented)
  • On every physics update the controller script should update the following fields either prior to calling the wheelCollider.physicsUpdate() method, or in the pre-update callback (if they have changed from previously set values):
    • gravity vector
    • motor torque
    • brake torque
    • steering angle

Source Code License

Source code for this project is currently licensed under GPL3.0 (or later). Please see the accompanying License-GPL3.txt file for full licensing details. Or alternatively the license may be viewed online at https://www.gnu.org/licenses/gpl-3.0.txt

Configs Licensing

Config files, if applicable, are hereby released into the Public Domain, and are free to be used, altered, and redistributed.

Example Assets

Assets included in this project are for academic purposes only and are not intended for redistribution in any format.
The Car model and textures were taken from the Unity 3 Wheel/Vehicle Sample asset package.
Grass texture for terrain is a freely available online and were noted to be free to use for public and commercial purposes.
Any other assets are the property of the respective Authors and their respective licenses must be consulted prior to any redistribution or re-use.

About

Replacement for U4 wheel collider, geared for use in KSP.

Resources

Stars

43 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

KSPWheel

Replacement for U4 wheel collider, geared for use in KSP.

Features:

  • Simple Component driven wheel collider system.
  • Multiple WheelColliders may be added to any model hierarchy or single game object.
  • Wheel colliders have no limitations on their orientation.
  • Wheel colliders may add forces to an arbitrary specified rigidbody, not necessarily the one closest to their parentage.
  • Wheel colliders may be easily enabled/disabled.
  • Wheel colliders may have -any- and -all- parameters changed during run-time, without any unexpected side effects.
  • Wheel collider physics updates are manually issued by the controller class, so all update ordering can be user controlled
    • Can optionally be set to 'auto-update', in which case it will fire updates in its own FixedUpdate
  • Configurable suspension sweep type - simple raycast (fastest, least accurate), sphere-cast (fast, very accurate for wide wheels), or compound capsule-cast (not as fast as the others, but potentially very accurate)
  • Configurable friction curves to simulate various tire types and properties.
  • Static friction ensures there is no unwanted sliding.
  • Supports 'zero-length' suspension setups by using stand-in colliders with standard friction.
    • Most other wheel functions will be disabled (motor, brakes, steering) as no friction force information is available.
    • Intended for use as a toggle on landing legs, but might have use on some wheels as well.
    • WIP -- Investigating solutions to calculate friction for solid suspension setups, which would allow for steering/motors/etc.

Typical Use:

  • Requires one or more user supplied 'Vehicle Controller' scripts/components to enable/disable colliders, sample input states, and update wheel torque/brake status. This script could function on a per-part or per-vehicle basis, depending upon user needs.
    • This script can manage one or more wheel colliders.
    • For use in KSP the VehicleController script should remove any U5 WheelColliders and replace them with the KSPWheelCollider component.
    • A fully functional set of PartModules for KSP are included that should be configurable for most wheels.
  • WheelCollider is responsible for all physics updating, managing sticky friction, bump-stop handling.
  • Several parameters require updating on every tick if they vary from the defaults; these should be set prior to the wheelCollider.updatePhysics() method being called:
    • brake torque
    • motor torque
    • steering angle
    • local gravity
  • Uses manual-update methods -- allows for grouping and batching of wheelCollider updates when multiple wheels are on the same part/vessel.

Setup:

  • Add KSPWheelCollider component to a game-object; either through the Editor, or at runtime.
  • Setup the following fields on the new WheelCollider (mandatory, needed for basic functionality):
    • rigidbody -- the rigidbody to apply forces to. MUST be setup or the wheels will have no effect.Defaults to 'false', requiring external update calls.
  • Optionally setup the following fields on the WheelCollider:
    • preUpdateAction - the pre-update callback (optional)
    • postUpdateAction - the post-update callback (optional)
    • autoUpdate - should wheelcollider update itself in FixedUpdate, or rely on manual external update calls?
    • friction curves
    • friction coefficients
    • suspensionSpring
    • suspensionDamper
    • wheelRadius
    • wheelMass
    • suspensionSweepType -- ray, sphere, capsule (WIP, working but needs additional options for CAPSULE type)
    • physicsModel -- standard, alternate1, alternate2 (WIP, Not yet implemented)
  • On every physics update the controller script should update the following fields either prior to calling the wheelCollider.physicsUpdate() method, or in the pre-update callback (if they have changed from previously set values):
    • gravity vector
    • motor torque
    • brake torque
    • steering angle

Source Code License

Source code for this project is currently licensed under GPL3.0 (or later). Please see the accompanying License-GPL3.txt file for full licensing details. Or alternatively the license may be viewed online at https://www.gnu.org/licenses/gpl-3.0.txt

Configs Licensing

Config files, if applicable, are hereby released into the Public Domain, and are free to be used, altered, and redistributed.

Example Assets

Assets included in this project are for academic purposes only and are not intended for redistribution in any format.
The Car model and textures were taken from the Unity 3 Wheel/Vehicle Sample asset package.
Grass texture for terrain is a freely available online and were noted to be free to use for public and commercial purposes.
Any other assets are the property of the respective Authors and their respective licenses must be consulted prior to any redistribution or re-use.

About

Replacement for U4 wheel collider, geared for use in KSP.

Resources

Stars

43 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

KSPWheel

Replacement for U4 wheel collider, geared for use in KSP.

Features:

  • Simple Component driven wheel collider system.
  • Multiple WheelColliders may be added to any model hierarchy or single game object.
  • Wheel colliders have no limitations on their orientation.
  • Wheel colliders may add forces to an arbitrary specified rigidbody, not necessarily the one closest to their parentage.
  • Wheel colliders may be easily enabled/disabled.
  • Wheel colliders may have -any- and -all- parameters changed during run-time, without any unexpected side effects.
  • Wheel collider physics updates are manually issued by the controller class, so all update ordering can be user controlled
    • Can optionally be set to 'auto-update', in which case it will fire updates in its own FixedUpdate
  • Configurable suspension sweep type - simple raycast (fastest, least accurate), sphere-cast (fast, very accurate for wide wheels), or compound capsule-cast (not as fast as the others, but potentially very accurate)
  • Configurable friction curves to simulate various tire types and properties.
  • Static friction ensures there is no unwanted sliding.
  • Supports 'zero-length' suspension setups by using stand-in colliders with standard friction.
    • Most other wheel functions will be disabled (motor, brakes, steering) as no friction force information is available.
    • Intended for use as a toggle on landing legs, but might have use on some wheels as well.
    • WIP -- Investigating solutions to calculate friction for solid suspension setups, which would allow for steering/motors/etc.

Typical Use:

  • Requires one or more user supplied 'Vehicle Controller' scripts/components to enable/disable colliders, sample input states, and update wheel torque/brake status. This script could function on a per-part or per-vehicle basis, depending upon user needs.
    • This script can manage one or more wheel colliders.
    • For use in KSP the VehicleController script should remove any U5 WheelColliders and replace them with the KSPWheelCollider component.
    • A fully functional set of PartModules for KSP are included that should be configurable for most wheels.
  • WheelCollider is responsible for all physics updating, managing sticky friction, bump-stop handling.
  • Several parameters require updating on every tick if they vary from the defaults; these should be set prior to the wheelCollider.updatePhysics() method being called:
    • brake torque
    • motor torque
    • steering angle
    • local gravity
  • Uses manual-update methods -- allows for grouping and batching of wheelCollider updates when multiple wheels are on the same part/vessel.

Setup:

  • Add KSPWheelCollider component to a game-object; either through the Editor, or at runtime.
  • Setup the following fields on the new WheelCollider (mandatory, needed for basic functionality):
    • rigidbody -- the rigidbody to apply forces to. MUST be setup or the wheels will have no effect.Defaults to 'false', requiring external update calls.
  • Optionally setup the following fields on the WheelCollider:
    • preUpdateAction - the pre-update callback (optional)
    • postUpdateAction - the post-update callback (optional)
    • autoUpdate - should wheelcollider update itself in FixedUpdate, or rely on manual external update calls?
    • friction curves
    • friction coefficients
    • suspensionSpring
    • suspensionDamper
    • wheelRadius
    • wheelMass
    • suspensionSweepType -- ray, sphere, capsule (WIP, working but needs additional options for CAPSULE type)
    • physicsModel -- standard, alternate1, alternate2 (WIP, Not yet implemented)
  • On every physics update the controller script should update the following fields either prior to calling the wheelCollider.physicsUpdate() method, or in the pre-update callback (if they have changed from previously set values):
    • gravity vector
    • motor torque
    • brake torque
    • steering angle

Source Code License

Source code for this project is currently licensed under GPL3.0 (or later). Please see the accompanying License-GPL3.txt file for full licensing details. Or alternatively the license may be viewed online at https://www.gnu.org/licenses/gpl-3.0.txt

Configs Licensing

Config files, if applicable, are hereby released into the Public Domain, and are free to be used, altered, and redistributed.

Example Assets

Assets included in this project are for academic purposes only and are not intended for redistribution in any format.
The Car model and textures were taken from the Unity 3 Wheel/Vehicle Sample asset package.
Grass texture for terrain is a freely available online and were noted to be free to use for public and commercial purposes.
Any other assets are the property of the respective Authors and their respective licenses must be consulted prior to any redistribution or re-use.

About

Replacement for U4 wheel collider, geared for use in KSP.

Resources

Stars

43 stars

Watchers

18 watching

Forks

Releases

Packages

Used by

Contributors

Languages