// 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; }
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); } }
public wheelStruct(float groundStiffness, string surface, PhysXWheelCollider wc) { this.groundStiffness = groundStiffness; this.surface = surface; this.collider = wc; }