void Awake() { carController = GetComponentInParent <RCC_CarControllerV3>(); rigid = carController.GetComponent <Rigidbody>(); wheelCollider = GetComponent <WheelCollider>(); if (!RCC_Settings.Instance.dontUseSkidmarks) { if (FindObjectOfType(typeof(RCC_Skidmarks))) { skidmarks = FindObjectOfType(typeof(RCC_Skidmarks)) as RCC_Skidmarks; } else { Debug.Log("No skidmarks object found. Creating new one..."); skidmarks = (RCC_Skidmarks)Instantiate(RCC_Settings.Instance.skidmarksManager, Vector3.zero, Quaternion.identity); } } wheelCollider.mass = rigid.mass / 15f; forwardFrictionCurve = wheelCollider.forwardFriction; sidewaysFrictionCurve = wheelCollider.sidewaysFriction; switch (RCC_Settings.Instance.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, .25f, 1f, .8f, .5f); sidewaysFrictionCurve = SetFrictionCurves(sidewaysFrictionCurve, .4f, 1f, .5f, .75f); wheelCollider.forceAppPointDistance = Mathf.Clamp(wheelCollider.forceAppPointDistance, .1f, 1f); if (carController._wheelTypeChoise == RCC_CarControllerV3.WheelType.FWD) { Debug.LogError("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, .75f, 2f); 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, .1f, 1f); break; } orgForwardStiffness = forwardFrictionCurve.stiffness; orgSidewaysStiffness = sidewaysFrictionCurve.stiffness; wheelCollider.forwardFriction = forwardFrictionCurve; wheelCollider.sidewaysFriction = sidewaysFrictionCurve; if (RCC_Settings.Instance.useSharedAudioSources) { if (!carController.transform.Find("All Audio Sources/Skid Sound AudioSource")) { audioSource = RCC_CreateAudioSource.NewAudioSource(carController.gameObject, "Skid Sound AudioSource", 5, 50, 0, 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", 5, 50, 0, audioClip, true, true, false); audioSource.transform.position = transform.position; } if (!RCC_Settings.Instance.dontUseAnyParticleEffects) { for (int i = 0; i < RCC_GroundMaterials.Instance.frictions.Length; i++) { GameObject ps = (GameObject)Instantiate(RCC_GroundMaterials.Instance.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>()); } } }
void Start() { skidmarks = carController.BotCar.game_sc.SkidmarksMenager; //carController = GetComponentInParent<RCC_CarControllerV3>(); //carRigid = carController.GetComponent<Rigidbody>(); //wheelCollider = GetComponent<WheelCollider>(); //allWheelColliders = carController.allWheelColliders.ToList(); //allWheelColliders.Remove(this); // if (FindObjectOfType(typeof(RCC_Skidmarks))){ // skidmarks = FindObjectOfType(typeof(RCC_Skidmarks)) as RCC_Skidmarks; //}else{ // Debug.Log("No skidmarks object found. Creating new one..."); // skidmarks = (RCC_Skidmarks)Instantiate(RCC_Settings.Instance.skidmarksManager, Vector3.zero, Quaternion.identity); //} wheelCollider.mass = carRigid.mass / 20f; forwardFrictionCurve = wheelCollider.forwardFriction; sidewaysFrictionCurve = wheelCollider.sidewaysFriction; camber = this == carController.FrontLeftWheelCollider || this == carController.FrontRightWheelCollider ? carController.frontCamber : carController.rearCamber; switch (RCC_Settings.Instance.behaviorType) { case RCC_Settings.BehaviorType.SemiArcade: forwardFrictionCurve = SetFrictionCurves(forwardFrictionCurve, .2f, 1f, 1f, 1f); sidewaysFrictionCurve = SetFrictionCurves(sidewaysFrictionCurve, .25f, 1f, 1f, 1f); forwardFrictionCurve.stiffness = 1f; sidewaysFrictionCurve.stiffness = 1f; wheelCollider.forceAppPointDistance = Mathf.Clamp(wheelCollider.forceAppPointDistance, .35f, 1f); break; case RCC_Settings.BehaviorType.Drift: forwardFrictionCurve = SetFrictionCurves(forwardFrictionCurve, .25f, 1f, .8f, .75f); sidewaysFrictionCurve = SetFrictionCurves(sidewaysFrictionCurve, .35f, 1f, .5f, .75f); wheelCollider.forceAppPointDistance = Mathf.Clamp(wheelCollider.forceAppPointDistance, .1f, 1f); if (carController._wheelTypeChoise == RCC_CarControllerV3.WheelType.FWD) { Debug.LogError("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, .75f, 2f); 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, .1f, 1f); break; } orgForwardStiffness = forwardFrictionCurve.stiffness; orgSidewaysStiffness = sidewaysFrictionCurve.stiffness; wheelCollider.forwardFriction = forwardFrictionCurve; wheelCollider.sidewaysFriction = sidewaysFrictionCurve; //if(RCC_Settings.Instance.useSharedAudioSources){ // if(!carController.transform.Find("All Audio Sources/Skid Sound AudioSource")) // audioSource = RCC_CreateAudioSource.NewAudioSource(carController.gameObject, "Skid Sound AudioSource", 5, 50, 0, audioClip, true, true, false); // else // audioSource = carController.transform.Find("All Audio Sources/Skid Sound AudioSource").GetComponent<AudioSource>(); //} //for (int i = 0; i < RCC_GroundMaterials.Instance.frictions.Length; i++) { // GameObject ps = (GameObject)Instantiate(RCC_GroundMaterials.Instance.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>()); //} }
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(); // Are we going to use skidmarks? If we do, get or create SkidmarksManager on scene. if (!RCCSettings.dontUseSkidmarks) { if (GameObject.FindObjectOfType(typeof(RCC_Skidmarks))) { skidmarks = GameObject.FindObjectOfType(typeof(RCC_Skidmarks)) as RCC_Skidmarks; } else { skidmarks = (RCC_Skidmarks)Instantiate(RCCSettings.skidmarksManager, Vector3.zero, Quaternion.identity); } } // Increasing WheelCollider mass for avoiding unstable behavior. Only in Unity 5. if (RCCSettings.useFixedWheelColliders) { wheelCollider.mass = rigid.mass / 20f; // wheelCollider.ConfigureVehicleSubsteps(1000f, 10, 10); } // Getting friction curves. forwardFrictionCurve = wheelCollider.forwardFriction; sidewaysFrictionCurve = wheelCollider.sidewaysFriction; // 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; } // Assigning new frictons if one of the behavior preset selected above. wheelCollider.forwardFriction = forwardFrictionCurve; wheelCollider.sidewaysFriction = sidewaysFrictionCurve; // 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> ()); } } 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; }
void Awake() { carController = GetComponentInParent <RCC_CarControllerV3>(); rigid = carController.GetComponent <Rigidbody> (); // Are we going to use skidmarks? If we do, get or create SkidmarksManager on scene. if (!RCCSettings.dontUseSkidmarks) { if (FindObjectOfType(typeof(RCC_Skidmarks))) { skidmarks = FindObjectOfType(typeof(RCC_Skidmarks)) as RCC_Skidmarks; } else { skidmarks = (RCC_Skidmarks)Instantiate(RCCSettings.skidmarksManager, Vector3.zero, Quaternion.identity); } } // Increasing WheelCollider mass for avoiding unstable behavior. Only in Unity 5. wheelCollider.mass = rigid.mass / 15f; // Getting friction curves. forwardFrictionCurve = wheelCollider.forwardFriction; sidewaysFrictionCurve = wheelCollider.sidewaysFriction; // Proper settings for selected behavior type. switch (RCCSettings.behaviorType) { case RCC_Settings.BehaviorType.HighwayRacer: forwardFrictionCurve = SetFrictionCurves(forwardFrictionCurve, .2f, 2f, 2f, 2f); sidewaysFrictionCurve = SetFrictionCurves(sidewaysFrictionCurve, .25f, 2f, 2f, 2f); wheelCollider.forceAppPointDistance = Mathf.Clamp(wheelCollider.forceAppPointDistance, .35f, 1f); break; } // Getting default stiffness. orgForwardStiffness = forwardFrictionCurve.stiffness; orgSidewaysStiffness = sidewaysFrictionCurve.stiffness; // Assigning new frictons if one of the behavior preset selected above. wheelCollider.forwardFriction = forwardFrictionCurve; wheelCollider.sidewaysFriction = sidewaysFrictionCurve; // 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", 5, 50, 0, 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", 5, 50, 0, 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> ()); } } }