Exemple #1
0
    // Start is called before the first frame update.
    void Start()
    {
        myRb = GetComponent <PhysXRigidBody>();

        meshstateTracker = FindObjectOfType <MeshstateTracker>();

        deformableMeshes = new List <DeformableMesh>(GetComponentsInChildren <DeformableMesh>());
        DeformableMesh.Subdivide(deformableMeshes[0].maxEdgeLength, deformableMeshes[0].GetMeshFilter().mesh);
        vertices = new List <Vector3>(deformableMeshes[0].GetMeshFilter().mesh.vertices);

        //  Group similar vertices.
        meshGraph = meshstateTracker.GetMyMeshGraph(meshType);

        originalMesh          = Instantiate(deformableMeshes[0].GetMeshFilter().mesh);
        collisionResolver     = Instantiate(collisionResolver);
        resolverBody          = collisionResolver.GetComponent <PhysXBody>();
        resolverBody.position = new Vector3(0, 10000, 0);

        interfaceCar = GetComponent <InterfaceCarDrive4W>();
        if (interfaceCar != null)
        {
            frWheel            = interfaceCar.frontRightW;
            frWheelVertexGroup = NearestVertexTo(frWheel.transform.position);
            flWheel            = interfaceCar.frontLeftW;
            flWheelVertexGroup = NearestVertexTo(flWheel.transform.position);
            rrWheel            = interfaceCar.rearRightW;
            rrWheelVertexGroup = NearestVertexTo(rrWheel.transform.position);
            rlWheel            = interfaceCar.rearLeftW;
            rlWheelVertexGroup = NearestVertexTo(rlWheel.transform.position);
        }

        teamId = GetComponent <NetworkPlayerVehicle>().teamId;
    }
Exemple #2
0
    private void AntiRoll(PhysXWheelCollider left, PhysXWheelCollider right)
    {
        //anti-roll bar simulations. Keeps the vehicle stable

        PhysXWheelHit lHit      = PhysXWheelHit.GetWheelHit();
        PhysXWheelHit rHit      = PhysXWheelHit.GetWheelHit();
        bool          lGrounded = left.GetGroundHit(lHit);
        bool          rGrounded = right.GetGroundHit(rHit);
        float         lDistance = 1f;
        float         rDistance = 1f;

        if (lGrounded)
        {
            lDistance = (-left.transform.InverseTransformPoint(lHit.point).y - left.radius) / left.suspensionDistance;
        }

        if (rGrounded)
        {
            rDistance = (-right.transform.InverseTransformPoint(rHit.point).y - right.radius) / right.suspensionDistance;
        }

        float addedForce = (lDistance - rDistance) * antiRollStiffness;

        if (lGrounded)
        {
            carRB.AddForceAtPosition(left.transform.up * -addedForce, left.transform.position, ForceMode.Force);
        }

        if (rGrounded)
        {
            carRB.AddForceAtPosition(right.transform.up * addedForce, right.transform.position, ForceMode.Force);
        }
        PhysXWheelHit.ReleaseWheelHit(lHit);
        PhysXWheelHit.ReleaseWheelHit(rHit);
    }
    private void UpdateWheelPose(PhysXWheelCollider collider, Transform transform, bool flip)
    {
        Vector3    pos  = transform.position;
        Quaternion quat = transform.rotation;

        collider.GetWorldPose(out pos, out quat);

        transform.position = pos;
        transform.rotation = quat;
        //if wheel is on the opposite side of the car, flip the wheel
        if (flip)
        {
            transform.rotation *= new Quaternion(0, 0, -1, 0);
        }
    }
Exemple #4
0
 public wheelStruct(float groundStiffness, string surface, PhysXWheelCollider wc)
 {
     this.groundStiffness = groundStiffness;
     this.surface         = surface;
     this.collider        = wc;
 }