Exemplo n.º 1
0
    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;
    }
Exemplo n.º 5
0
    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;
    }