//---------------------------------------------- // Simple Car Controller // // Copyright © 2014 - 2023 BoneCracker Games // http://www.bonecrackergames.com // //---------------------------------------------- using UnityEngine; using System.Collections; using System.Collections.Generic; /// /// Class was used for creating new WheelColliders on Editor. /// public class SCC_CreateWheelCollider { // Method was used for creating new WheelColliders on Editor. public static WheelCollider CreateWheelCollider(GameObject car, Transform wheel) { // If we don't have any wheelmodels, throw an error. if (!wheel) { Debug.LogError("You haven't selected your Wheel Model. Please your Wheel Model before creating Wheel Colliders. Script needs to know their sizes and positions, aye?"); return null; } // Holding default rotation. Quaternion currentRotation = car.transform.rotation; // Resetting rotation. car.transform.rotation = Quaternion.identity; // Creating a new gameobject called Wheel Colliders for all Wheel Colliders, and parenting it to this gameobject. GameObject wheelColliders; if (!car.transform.Find("Wheel Colliders")) { wheelColliders = new GameObject("Wheel Colliders"); wheelColliders.transform.SetParent(car.transform, false); wheelColliders.transform.localRotation = Quaternion.identity; wheelColliders.transform.localPosition = Vector3.zero; wheelColliders.transform.localScale = Vector3.one; } else { wheelColliders = car.transform.Find("Wheel Colliders").gameObject; } GameObject wheelcollider = new GameObject(wheel.transform.name); wheelcollider.transform.position = wheel.transform.position; wheelcollider.transform.rotation = car.transform.rotation; wheelcollider.transform.name = wheel.transform.name; wheelcollider.transform.SetParent(wheelColliders.transform); wheelcollider.transform.localScale = Vector3.one; wheelcollider.AddComponent(); Bounds biggestBound = new Bounds(); Renderer[] renderers = wheel.GetComponentsInChildren(); foreach (Renderer render in renderers) { if (render.bounds.size.z > biggestBound.size.z) biggestBound = render.bounds; } wheelcollider.GetComponent().radius = (biggestBound.extents.y) / car.transform.localScale.y; wheelcollider.AddComponent(); JointSpring spring = wheelcollider.GetComponent().suspensionSpring; spring.spring = 35000f; spring.damper = 1500f; spring.targetPosition = .5f; wheelcollider.GetComponent().suspensionSpring = spring; wheelcollider.GetComponent().suspensionDistance = .2f; wheelcollider.GetComponent().forceAppPointDistance = .1f; wheelcollider.GetComponent().mass = 40f; wheelcollider.GetComponent().wheelDampingRate = 1f; WheelFrictionCurve sidewaysFriction; WheelFrictionCurve forwardFriction; sidewaysFriction = wheelcollider.GetComponent().sidewaysFriction; forwardFriction = wheelcollider.GetComponent().forwardFriction; forwardFriction.extremumSlip = .3f; forwardFriction.extremumValue = 1; forwardFriction.asymptoteSlip = 1f; forwardFriction.asymptoteValue = 1f; forwardFriction.stiffness = 1.5f; sidewaysFriction.extremumSlip = .3f; sidewaysFriction.extremumValue = 1; sidewaysFriction.asymptoteSlip = 1f; sidewaysFriction.asymptoteValue = 1f; sidewaysFriction.stiffness = 1.5f; wheelcollider.GetComponent().sidewaysFriction = sidewaysFriction; wheelcollider.GetComponent().forwardFriction = forwardFriction; car.transform.rotation = currentRotation; return wheelcollider.GetComponent(); } }