public WheelDataExt SetupWheels(Transform wheel) { WheelDataExt result = new WheelDataExt(); GameObject go = new GameObject(wheel.name); go.transform.parent = transform; go.transform.position = wheel.position; go.transform.localRotation = Quaternion.Euler(0, wheel.localRotation.y, 0); WheelCollider col = (WheelCollider)go.AddComponent(typeof(WheelCollider)); col.mass = colliderFromPrefab.mass; col.center = colliderFromPrefab.center; col.radius = colliderFromPrefab.radius; col.suspensionDistance = colliderFromPrefab.suspensionDistance; col.suspensionSpring = colliderFromPrefab.suspensionSpring; col.forwardFriction = colliderFromPrefab.forwardFriction; col.sidewaysFriction = colliderFromPrefab.sidewaysFriction; col.forceAppPointDistance = colliderFromPrefab.forceAppPointDistance; result.wheelTransform = wheel; result.col = col; result.wheelStartPos = wheel.transform.localPosition; result.wheelRotationAngles = wheel.localEulerAngles; return(result); }
private RFRD TrackUpdate(float accel,float steer,WheelDataExt[] WD, GameObject track, ref Vector2 trackTextureOffset, WheelData[] upperWheels, ref float middleRPM) { float delta = Time.fixedDeltaTime; RFRD rfrd = new RFRD(); float trackRpm = 0.0f; trackRpm = CalculateSmoothRpm(WD); middleRPM = trackRpm; float RPMtoDeg = delta * trackRpm * 360.0f / 60.0f; if(wheelsAndBonesAxisSettings.inverseWheelsRotation) RPMtoDeg *=-1.0f; foreach (WheelDataExt w in WD){ w.wheelTransform.localPosition = CalculateWheelOrBonePosition(w.wheelTransform,w.col,w.wheelStartPos,true); w.boneTransform.localPosition = CalculateWheelOrBonePosition(w.boneTransform,w.col,w.boneStartPos,false); w.wheelRotationAngles[wheelsAndBonesAxisSettings.WRAxisPointer] = Mathf.Repeat(w.wheelRotationAngles[wheelsAndBonesAxisSettings.WRAxisPointer] + RPMtoDeg,360.0f); w.wheelTransform.localEulerAngles = w.wheelRotationAngles; rfrd += CalculateMotorForce(w.col,accel,steer); //Debug.Log(rfrd.rotationDamper); } if(trackTextireAnimationSettings.inverseTextureDirection) trackRpm *=-1.0f; trackTextureOffset[trackTextireAnimationSettings.TTAxisPointer] = Mathf.Repeat(trackTextureOffset[trackTextireAnimationSettings.TTAxisPointer] + delta*trackRpm*trackTextureSpeed/60.0f,1.0f); if(track.renderer.material.GetTexture("_MainTex")){ track.renderer.material.SetTextureOffset("_MainTex",trackTextureOffset); } if(track.renderer.material.GetTexture("_BumpMap")){ track.renderer.material.SetTextureOffset("_BumpMap",trackTextureOffset); } foreach (WheelData w in upperWheels){ w.wheelRotationAngles[wheelsAndBonesAxisSettings.WRAxisPointer] = Mathf.Repeat(w.wheelRotationAngles[wheelsAndBonesAxisSettings.WRAxisPointer] + RPMtoDeg,360.0f); w.wheelTransform.localEulerAngles = w.wheelRotationAngles; } return rfrd; }
private float CalculateSmoothRpm(WheelDataExt[] w) { float rpm = 0.0f; List<int> grWheelsInd = new List<int>(); for(int i = 0;i<w.Length;i++){ if(w[i].col.isGrounded){ grWheelsInd.Add(i); } } if(grWheelsInd.Count == 0){ foreach(WheelDataExt wd in w){ rpm +=wd.col.rpm; } rpm /= w.Length; }else{ for(int i = 0;i<grWheelsInd.Count;i++){ rpm +=w[grWheelsInd[i]].col.rpm; } rpm /= grWheelsInd.Count; } return rpm; }
private WheelDataExt SetupWheels(Transform wheel, Transform bone) { WheelDataExt result = new WheelDataExt(); GameObject go = new GameObject("Collider_"+wheel.name);//(GameObject)Instantiate(wheelCollider,wheel.position,Quaternion.identity);// go.transform.parent = transform; go.transform.position = wheel.position; go.transform.localRotation = Quaternion.Euler(0,wheel.localRotation.y,0); WheelCollider col = (WheelCollider) go.AddComponent(typeof(WheelCollider)); col.mass = colliderFromPrefab.mass; col.center = colliderFromPrefab.center; col.radius = colliderFromPrefab.radius; col.suspensionDistance = colliderFromPrefab.suspensionDistance; col.suspensionSpring = colliderFromPrefab.suspensionSpring; col.forwardFriction = colliderFromPrefab.forwardFriction; col.sidewaysFriction = colliderFromPrefab.sidewaysFriction; result.wheelTransform = wheel; result.boneTransform = bone; result.col = col; result.wheelStartPos = wheel.transform.localPosition; result.boneStartPos = bone.transform.localPosition; result.wheelRotationAngles = wheel.localEulerAngles; return result; }
private float CalculateSmoothRpm(WheelDataExt[] w) { float rpm = 0.0f; List<int> grWheelsInd = new List<int>(); for (int i = 0; i < w.Length; i++) { if (w[i].col.isGrounded) { grWheelsInd.Add(i); } } if (grWheelsInd.Count == 0) { foreach (WheelDataExt wd in w) { rpm += wd.col.rpm; } rpm /= w.Length; } else { for (int i = 0; i < grWheelsInd.Count; i++) { rpm += w[grWheelsInd[i]].col.rpm; } rpm /= grWheelsInd.Count; } GetComponent<AudioSource>().pitch = 1 + Mathf.Abs(rpm) / 400; return rpm; }