Beispiel #1
0
 public override void Start()
 {
     base.Start();
     targetDrive = GetComponent <DriveForce>();
     //Get maximum possible RPM
     GetMaxRPM();
 }
        void Start()
        {
            tr                = transform;
            rb                = tr.GetTopmostParentComponent <Rigidbody>();
            vp                = tr.GetTopmostParentComponent <VehicleParent>();
            targetDrive       = GetComponent <DriveForce>();
            flippedSide       = Vector3.Dot(tr.forward, vp.transform.right) < 0;
            flippedSideFactor = flippedSide ? -1 : 1;
            initialRotation   = tr.localRotation;

            if (Application.isPlaying)
            {
                GetCamber();

                //Generate the hard collider
                if (generateHardCollider)
                {
                    GameObject cap = new GameObject("Compress Collider");
                    cap.layer                    = GlobalControl.ignoreWheelCastLayer;
                    compressTr                   = cap.transform;
                    compressTr.parent            = tr;
                    compressTr.localPosition     = Vector3.zero;
                    compressTr.localEulerAngles  = new Vector3(camberAngle, 0, -casterAngle * flippedSideFactor);
                    compressCol                  = cap.AddComponent <CapsuleCollider>();
                    compressCol.direction        = 1;
                    setHardColliderRadiusFactor  = hardColliderRadiusFactor;
                    hardColliderRadiusFactorPrev = setHardColliderRadiusFactor;
                    compressCol.radius           = wheel.rimWidth * hardColliderRadiusFactor;
                    compressCol.height           = (wheel.popped ? wheel.rimRadius : Mathf.Lerp(wheel.rimRadius, wheel.tireRadius, wheel.tirePressure)) * 2;
                    compressCol.material         = GlobalControl.frictionlessMatStatic;
                }

                steerRangeMax = Mathf.Max(steerRangeMin, steerRangeMax);

                properties = GetComponent <SuspensionPropertyToggle>();
                if (properties)
                {
                    UpdateProperties();
                }
            }
        }
Beispiel #3
0
 public virtual void Start()
 {
     vp          = transform.GetTopmostParentComponent <VehicleParent>();
     targetDrive = GetComponent <DriveForce>();
     newDrive    = gameObject.AddComponent <DriveForce>();
 }
        void Start()
        {
            tr = transform;
            rb = (Rigidbody)F.GetTopmostParentComponent <Rigidbody>(tr);
            vp = (VehicleParent)F.GetTopmostParentComponent <VehicleParent>(tr);
            suspensionParent    = tr.parent.GetComponent <Suspension>();
            travelDist          = suspensionParent.targetCompression;
            canDetach           = detachForce < Mathf.Infinity && Application.isPlaying;
            initialTirePressure = tirePressure;

            if (tr.childCount > 0)
            {
                //Get rim
                rim = tr.GetChild(0);

                //Set up rim glow material
                if (rimGlow > 0 && Application.isPlaying)
                {
                    rimMat = new Material(rim.GetComponent <MeshRenderer>().sharedMaterial);
                    rimMat.EnableKeyword("_EMISSION");
                    rim.GetComponent <MeshRenderer>().material = rimMat;
                }

                //Create detached wheel
                if (canDetach)
                {
                    detachedWheel           = new GameObject(vp.transform.name + "'s Detached Wheel");
                    detachedWheel.layer     = LayerMask.NameToLayer("Detachable Part");
                    detachFilter            = detachedWheel.AddComponent <MeshFilter>();
                    detachFilter.sharedMesh = rim.GetComponent <MeshFilter>().sharedMesh;
                    MeshRenderer detachRend = detachedWheel.AddComponent <MeshRenderer>();
                    detachRend.sharedMaterial = rim.GetComponent <MeshRenderer>().sharedMaterial;
                    detachedCol        = detachedWheel.AddComponent <MeshCollider>();
                    detachedCol.convex = true;
                    detachedBody       = detachedWheel.AddComponent <Rigidbody>();
                    detachedBody.mass  = mass;
                }

                //Get tire
                if (rim.childCount > 0)
                {
                    tire = rim.GetChild(0);
                    if (deformAmount > 0 && Application.isPlaying)
                    {
                        tireMat = new Material(tire.GetComponent <MeshRenderer>().sharedMaterial);
                        tire.GetComponent <MeshRenderer>().material = tireMat;
                    }

                    //Create detached tire
                    if (canDetach)
                    {
                        detachedTire = new GameObject("Detached Tire");
                        detachedTire.transform.parent        = detachedWheel.transform;
                        detachedTire.transform.localPosition = Vector3.zero;
                        detachedTire.transform.localRotation = Quaternion.identity;
                        detachTireFilter            = detachedTire.AddComponent <MeshFilter>();
                        detachTireFilter.sharedMesh = tire.GetComponent <MeshFilter>().sharedMesh;
                        MeshRenderer detachTireRend = detachedTire.AddComponent <MeshRenderer>();
                        detachTireRend.sharedMaterial = tireMat ? tireMat : tire.GetComponent <MeshRenderer>().sharedMaterial;
                    }
                }

                if (Application.isPlaying)
                {
                    //Generate hard collider
                    if (generateHardCollider)
                    {
                        GameObject sphereColNew = new GameObject("Rim Collider");
                        sphereColNew.layer        = GlobalControl.ignoreWheelCastLayer;
                        sphereColTr               = sphereColNew.transform;
                        sphereCol                 = sphereColNew.AddComponent <SphereCollider>();
                        sphereColTr.parent        = tr;
                        sphereColTr.localPosition = Vector3.zero;
                        sphereColTr.localRotation = Quaternion.identity;
                        sphereCol.radius          = Mathf.Min(rimWidth * 0.5f, rimRadius * 0.5f);
                        sphereCol.material        = GlobalControl.frictionlessMatStatic;
                    }

                    if (canDetach)
                    {
                        detachedWheel.SetActive(false);
                    }
                }
            }

            targetDrive = GetComponent <DriveForce>();
            currentRPM  = 0;
        }
 // Same as previous, but with torqueFactor multiplier for torque
 public void SetDrive(DriveForce from, float torqueFactor)
 {
     rpm    = from.rpm;
     torque = from.torque * torqueFactor;
     curve  = from.curve;
 }
 public void SetDrive(DriveForce from)
 {
     rpm    = from.rpm;
     torque = from.torque;
     curve  = from.curve;
 }