void Start (){ // Getting essentials. carController = GetComponentInParent<RCC_CarControllerV3>(); rigid = carController.GetComponent<Rigidbody> (); // Getting all WheelColliders attached to this vehicle (Except this). allWheelColliders = carController.GetComponentsInChildren<RCC_WheelCollider>().ToList(); GetTerrainData (); // Getting terrain datas on scene. CheckBehavior (); // Checks selected behavior in RCC Settings. // Are we going to use skidmarks? If we do, get or create SkidmarksManager on scene. if (!RCCSettings.dontUseSkidmarks) { if (GameObject.FindObjectOfType<RCC_SkidmarksManager> ()) skidmarksManager = GameObject.FindObjectOfType<RCC_SkidmarksManager> (); else skidmarksManager = GameObject.Instantiate (RCCSettings.skidmarksManager, Vector3.zero, Quaternion.identity); } // Increasing WheelCollider mass for avoiding unstable behavior. if (RCCSettings.useFixedWheelColliders) wheelCollider.mass = rigid.mass / 15f; // Creating audiosource for skid SFX. audioSource = NewAudioSource(RCCSettings.audioMixer, carController.gameObject, "Skid Sound AudioSource", 5f, 50f, 0f, audioClip, true, true, false); audioSource.transform.position = transform.position; // Creating all ground particles, and adding them to list. if (!RCCSettings.dontUseAnyParticleEffects) { for (int i = 0; i < RCCGroundMaterials.frictions.Length; i++) { GameObject ps = (GameObject)Instantiate (RCCGroundMaterials.frictions [i].groundParticles, transform.position, transform.rotation) as GameObject; emission = ps.GetComponent<ParticleSystem> ().emission; emission.enabled = false; ps.transform.SetParent (transform, false); ps.transform.localPosition = Vector3.zero; ps.transform.localRotation = Quaternion.identity; allWheelParticles.Add (ps.GetComponent<ParticleSystem> ()); } } // Creating pivot position of the wheel at correct position and rotation. GameObject newPivot = new GameObject ("Pivot_" + wheelModel.transform.name); newPivot.transform.position = RCC_GetBounds.GetBoundsCenter (wheelModel.transform); newPivot.transform.rotation = transform.rotation; newPivot.transform.SetParent (wheelModel.transform.parent, true); // Settings offsets. if (newPivot.transform.localPosition.x > 0) wheelModel.transform.position += transform.right * offset; else wheelModel.transform.position -= transform.right * offset; // Assigning temporary created wheel to actual wheel. wheelModel.SetParent (newPivot.transform, true); wheelModel = newPivot.transform; // Override wheels automatically if enabled. if (carController.overrideWheels) { // Overriding canPower, canSteer, canBrake, canHandbrake. if (this == carController.FrontLeftWheelCollider || this == carController.FrontRightWheelCollider) { canSteer = true; canBrake = true; brakingMultiplier = 1f; } if (this == carController.RearLeftWheelCollider || this == carController.RearRightWheelCollider) { canHandbrake = true; canBrake = true; brakingMultiplier = .5f; } } }
void Start() { carController = GetComponentInParent <RCC_CarControllerV3>(); rigid = carController.GetComponent <Rigidbody> (); // Getting all WheelColliders attached to this vehicle (Except this). allWheelColliders = carController.GetComponentsInChildren <RCC_WheelCollider>().ToList(); // allWheelColliders.Remove(this); GetTerrainData(); CheckBehavior(); // Are we going to use skidmarks? If we do, get or create SkidmarksManager on scene. if (!RCCSettings.dontUseSkidmarks) { if (GameObject.FindObjectOfType <RCC_SkidmarksManager> ()) { skidmarksManager = GameObject.FindObjectOfType <RCC_SkidmarksManager> (); } else { skidmarksManager = GameObject.Instantiate(RCCSettings.skidmarksManager, Vector3.zero, Quaternion.identity); } } // Increasing WheelCollider mass for avoiding unstable behavior. if (RCCSettings.useFixedWheelColliders) { wheelCollider.mass = rigid.mass / 20f; } // wheelCollider.forceAppPointDistance = Mathf.Clamp(wheelCollider.forceAppPointDistance, .35f, 1f); // Proper settings for selected behavior type. // switch(RCCSettings.behaviorType){ // // case RCC_Settings.BehaviorType.SemiArcade: // forwardFrictionCurve = SetFrictionCurves(forwardFrictionCurve, .2f, 2f, 2f, 2f); // sidewaysFrictionCurve = SetFrictionCurves(sidewaysFrictionCurve, .25f, 2f, 2f, 2f); // wheelCollider.forceAppPointDistance = Mathf.Clamp(wheelCollider.forceAppPointDistance, .35f, 1f); // break; // // case RCC_Settings.BehaviorType.Drift: // forwardFrictionCurve = SetFrictionCurves(forwardFrictionCurve, .3f, 1f, .8f, 1f); // sidewaysFrictionCurve = SetFrictionCurves(sidewaysFrictionCurve, .3f, 1f, .5f, 1f); // wheelCollider.forceAppPointDistance = Mathf.Clamp(wheelCollider.forceAppPointDistance, .1f, 1f); // if(carController._wheelTypeChoise == RCC_CarControllerV3.WheelType.FWD){ // Debug.LogWarning("Current behavior mode is ''Drift'', but your vehicle named " + carController.name + " was FWD. You have to use RWD, AWD, or BIASED to rear wheels. Setting it to *RWD* now. "); // carController._wheelTypeChoise = RCC_CarControllerV3.WheelType.RWD; // } // break; // // case RCC_Settings.BehaviorType.Fun: // forwardFrictionCurve = SetFrictionCurves(forwardFrictionCurve, .2f, 2f, 2f, 2f); // sidewaysFrictionCurve = SetFrictionCurves(sidewaysFrictionCurve, .25f, 2f, 2f, 2f); // wheelCollider.forceAppPointDistance = Mathf.Clamp(wheelCollider.forceAppPointDistance, .35f, 1f); // break; // // case RCC_Settings.BehaviorType.Racing: // forwardFrictionCurve = SetFrictionCurves(forwardFrictionCurve, .2f, 1f, .8f, .75f); // sidewaysFrictionCurve = SetFrictionCurves(sidewaysFrictionCurve, .3f, 1f, .25f, .75f); // wheelCollider.forceAppPointDistance = Mathf.Clamp(wheelCollider.forceAppPointDistance, .25f, 1f); // break; // // case RCC_Settings.BehaviorType.Simulator: // forwardFrictionCurve = SetFrictionCurves(forwardFrictionCurve, .2f, 1f, .8f, .75f); // sidewaysFrictionCurve = SetFrictionCurves(sidewaysFrictionCurve, .25f, 1f, .5f, .75f); // wheelCollider.forceAppPointDistance = Mathf.Clamp(wheelCollider.forceAppPointDistance, 0f, 1f); // break; // // } // Creating audiosource for skid SFX. if (RCCSettings.useSharedAudioSources) { if (!carController.transform.Find("All Audio Sources/Skid Sound AudioSource")) { audioSource = RCC_CreateAudioSource.NewAudioSource(carController.gameObject, "Skid Sound AudioSource", 5f, 50f, 0f, audioClip, true, true, false); } else { audioSource = carController.transform.Find("All Audio Sources/Skid Sound AudioSource").GetComponent <AudioSource>(); } } else { audioSource = RCC_CreateAudioSource.NewAudioSource(carController.gameObject, "Skid Sound AudioSource", 5f, 50f, 0f, audioClip, true, true, false); audioSource.transform.position = transform.position; } // Creating all ground particles, and adding them to list. if (!RCCSettings.dontUseAnyParticleEffects) { for (int i = 0; i < RCCGroundMaterials.frictions.Length; i++) { GameObject ps = (GameObject)Instantiate(RCCGroundMaterials.frictions [i].groundParticles, transform.position, transform.rotation) as GameObject; emission = ps.GetComponent <ParticleSystem> ().emission; emission.enabled = false; ps.transform.SetParent(transform, false); ps.transform.localPosition = Vector3.zero; ps.transform.localRotation = Quaternion.identity; allWheelParticles.Add(ps.GetComponent <ParticleSystem> ()); } } // Creating pivot position of the wheel. GameObject newPivot = new GameObject("Pivot_" + wheelModel.transform.name); newPivot.transform.position = RCC_GetBounds.GetBoundsCenter(wheelModel.transform); newPivot.transform.rotation = transform.rotation; newPivot.transform.SetParent(wheelModel.transform.parent, true); wheelModel.SetParent(newPivot.transform, true); wheelModel = newPivot.transform; }