Esempio n. 1
0
    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;
    }
Esempio n. 4
0
    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> ());
            }
        }
    }