void UpdateWheelHeight(Transform wheelTransform, WheelCollider collider) { Vector3 localPosition = wheelTransform.localPosition; WheelHit hit = new WheelHit(); // see if we have contact with ground if (collider.GetGroundHit(out hit)) { float hitY = collider.transform.InverseTransformPoint(hit.point).y; localPosition.y = hitY + collider.radius; if (wheelCollider.GetComponent <ParticleSystem>() != null) { ParticleSystem.EmissionModule em = wheelCollider.GetComponent <ParticleSystem>().emission; em.enabled = //Mathf.Abs(hit.forwardSlip) >= wheelCollider.forwardFriction.extremumSlip || Mathf.Abs(hit.sidewaysSlip) >= wheelCollider.sidewaysFriction.extremumSlip; } } else { // no contact with ground, just extend wheel position with suspension distance localPosition = Vector3.Lerp(localPosition, -Vector3.up * collider.suspensionDistance, .05f); if (wheelCollider.GetComponent <ParticleSystem>() != null) { ParticleSystem.EmissionModule em = wheelCollider.GetComponent <ParticleSystem>().emission; em.enabled = false; } } wheelTransform.localPosition = localPosition; wheelAngle += (((collider.rpm * 360f) / 60f) * Time.fixedDeltaTime) % 360f; wheelTransform.localRotation = Quaternion.Euler(wheelAngle, collider.steerAngle, 0); }
public void TireWearMonitor() { //ghetto code here for now tirewearlist[0] = wheelFL.GetComponent <TireBehavior>().TreadHealth; tirewearlist[1] = wheelFR.GetComponent <TireBehavior>().TreadHealth; tirewearlist[2] = wheelRL.GetComponent <TireBehavior>().TreadHealth; tirewearlist[3] = wheelRR.GetComponent <TireBehavior>().TreadHealth; }
void Start() { rb = GetComponent <Rigidbody>(); tr1 = botLeft.GetComponent <TrailRenderer>(); tr2 = botRight.GetComponent <TrailRenderer>(); rb.centerOfMass = new Vector3(0, -0.9f, 0); // find other script gameobject to access methods //GameObject tempImg = GameObject.Find("SpeedBar"); //speedBar = tempImg.GetComponent<SpeedBar>(); }
void Start() { FL.GetComponent <WheelCollider>(); FR.GetComponent <WheelCollider>(); RL.GetComponent <WheelCollider>(); RR.GetComponent <WheelCollider>(); COM = GameObject.Find("CenterOfGravity"); GetComponent <Rigidbody>().centerOfMass = new Vector3(COM.transform.localPosition.x * transform.localScale.x, COM.transform.localPosition.y * transform.localScale.y, COM.transform.localPosition.z * transform.localScale.z); Transform BlackCarRearLights = GameObject.Find("Lights_red").transform.GetChild(0); BL_light = BlackCarRearLights.GetChild(0).GetComponent <Light>(); BR_light = BlackCarRearLights.GetChild(1).GetComponent <Light>(); BL_light.intensity = 0.5f; BR_light.intensity = 0.5f; for (int i = 1; i <= 11; ++i) { CarSound.Add(GameObject.Find(string.Format("CarSound_2_({0})", i)).GetComponent <AudioSource>()); CarSound[i - 1].Play(); } }
void FixedUpdate() { if (!coll.GetComponent <WheelCollider>().GetGroundHit(out wheelHit)) { tr.emitting = false; return; } if (wheelHit.collider.tag == "Terrain") { tr.emitting = false; return; } if (wheelHit.sidewaysSlip > 0.6 | wheelHit.forwardSlip > 0.9) { tr.emitting = true; } else if (wheelHit.sidewaysSlip <= 0.6 && wheelHit.forwardSlip <= 0.9) { tr.emitting = false; } }
public void destroyWheel(Wheels whichWheel) { int idx = (int)whichWheel; WheelCollider wc = wheels[idx].wc; if (wheels[idx].breaked >= 0.9f) { wheelRadius = wc.radius; wheels[idx].breaked = 0.24f; wc.radius = RimRadius; wc.mass *= 0.5f; wc.suspensionDistance *= 0.5f; WheelFrictionCurve wfc = wc.forwardFriction; wfc.extremumSlip *= 0.5f; wfc.extremumValue *= 0.25f; wfc.asymptoteSlip *= 0.5f; wfc.asymptoteValue *= 0.25f; wc.forwardFriction = wfc; wfc = wc.sidewaysFriction; wfc.extremumValue *= 0.5f; wfc.asymptoteValue *= 0.5f; wc.sidewaysFriction = wfc; if (wheels[idx].tire != null) { //Destroy(wheels[idx].tire); wheels[idx].tire.SetActive(false); //wheels[idx].tire = null; } } GetComponent <Rigidbody>().AddExplosionForce(120000.0f, wc.GetComponent <Transform>().position, 20.0f); //GetComponent<Rigidbody>().AddExplosionForce(5000.0f, Vector3.zero, 540.0f); }
void SetupWheels() { wheeltransformList.Clear(); wheelcolliderList.Clear(); wheelsComponent.Clear(); wheeltransformList.Add(FL_Wheel); wheelcolliderList.Add(FL_WheelCollider); wheelsComponent.Add(FL_WheelCollider.GetComponent <Wheels>()); wheeltransformList.Add(FR_Wheel); wheelcolliderList.Add(FR_WheelCollider); wheelsComponent.Add(FR_WheelCollider.GetComponent <Wheels>()); wheeltransformList.Add(RL_Wheel); wheelcolliderList.Add(RL_WheelCollider); wheelsComponent.Add(RL_WheelCollider.GetComponent <Wheels>()); wheeltransformList.Add(RR_Wheel); wheelcolliderList.Add(RR_WheelCollider); wheelsComponent.Add(RR_WheelCollider.GetComponent <Wheels>()); for (int i = 0; i < wheelsComponent.Count; i++) { wheelsComponent[i].SetupWheelCollider(50, 25000, 2000); } //Set no traction for the drift race type if (RaceManager.instance && RaceManager.instance._raceType == RaceManager.RaceType.Drift) { traction = 0; steerHelper = 0; if (_propulsion == Propulsion.FWD) { _propulsion = Propulsion.RWD; Debug.Log("Setting propulsion to RWD for the drift race"); } } }
void Start() { wheelCollider.GetComponent <ParticleSystem>().emissionRate = 500; }
void SetupWheels() { wheelcolliderList.Clear(); wheeltransformList.Clear(); //Add wheel transfoms/colliders to the lists wheeltransformList.Add(frontWheelTransform); wheelcolliderList.Add(frontWheelCollider); wheelsComponent.Add(frontWheelCollider.GetComponent <Wheels>()); wheeltransformList.Add(rearWheelTransform); wheelcolliderList.Add(rearWheelCollider); wheelsComponent.Add(rearWheelCollider.GetComponent <Wheels>()); for (int i = 0; i < wheelsComponent.Count; i++) { wheelsComponent[i].SetupWheelCollider(150, 60000, 4500); } }
private void FixedUpdate() { //플레이가 가능하면 if (m_gameManager.m_isPlay) { GetInput(); Steer(); if (m_isbreak) { Breaking(); } else { Accelerate(); } UpdatesWheelMesh(); // km/h = 원의둘레 * rpm -> m/m => km/h로변환하려면 60/1000을 해준다. 1m = 1/1000 km 이다. //m_currentSpeed = Mathf.Round((2 * frontDriverW.radius * Mathf.PI) * frontDriverW.rpm * (60.0f / 1000.0f)); //1초당 1M -> 1시간당 1KM m_currentSpeed = Mathf.Round(GetComponent <Rigidbody>().velocity.magnitude * 3.6f); m_speedometer.GetComponent <Image>().fillAmount = m_currentSpeed / m_maxSpeed; m_kmPh.text = m_currentSpeed.ToString(); WheelHit hit; rearDriverW.GetComponent <WheelCollider>().GetGroundHit(out hit); float currentFrictionValue = hit.sidewaysSlip; currentFrictionValue = Mathf.Abs(currentFrictionValue); //Debug.Log(currentFrictionValue); if (currentFrictionValue >= 0.1f) { setSkidMark(); m_img_gage.GetComponent <Image>().fillAmount = m_gage / 100.0f; m_gage += 0.5f; if (m_isboost == false && m_gage >= 100.0f) { m_gage = 100.0f; m_img_gage.GetComponent <Image>().color = new Color(1, 0, 0, 1); m_isboost = true; } } if (m_isboost) { if (Input.GetKeyDown(KeyCode.E) && frontPassengerW.brakeTorque == 0.0f) { m_gage = 0.0f; m_img_gage.GetComponent <Image>().fillAmount = m_gage / 100.0f; m_img_gage.GetComponent <Image>().color = new Color(0, 0, 1, 1); m_isboost = false; StartCoroutine(StartBoost()); } } } }