/// <summary> /// /// </summary> /// <param name="chassis"></param> /// <param name="paramRaycastInfo">Not used!</param> public void UpdateWheel(RigidBody chassis, RaycastInfo paramRaycastInfo) { if (_raycastInfo.IsInContact) { float project = Vector3.Dot(_raycastInfo.ContactNormalWS, _raycastInfo.WheelDirectionWS); Vector3 chassisVelocityAtContactPoint = new Vector3(); Vector3 relpos = _raycastInfo.ContactPointWS - chassis.CenterOfMassPosition; chassisVelocityAtContactPoint = chassis.GetVelocityInLocalPoint(relpos); float projVel = Vector3.Dot(_raycastInfo.ContactNormalWS, chassisVelocityAtContactPoint); if (project >= -0.1f) { _suspensionRelativeVelocity = 0; _clippedInvContactDotSuspension = 1.0f / 0.1f; } else { float inv = -1 / project; _suspensionRelativeVelocity = projVel * inv; _clippedInvContactDotSuspension = inv; } } else { _raycastInfo.SuspensionLength = _suspensionRestLength; _suspensionRelativeVelocity = 0.0f; _raycastInfo.ContactNormalWS = -_raycastInfo.WheelDirectionWS; _clippedInvContactDotSuspension = 1.0f; } }
public WheelInfo(WheelInfoConstructionInfo constructionInfo) { _suspensionRestLength = constructionInfo.SuspensionRestLength; _maxSuspensionTravelCm = constructionInfo.MaxSuspensionTravelCm; _wheelsRadius = constructionInfo.WheelRadius; _wheelsDampingCompression = constructionInfo.WheelsDampingCompression; _wheelsDampingRelaxation = constructionInfo.WheelsDampingRelaxation; _wheelDirectionCS = constructionInfo.WheelDirectionCS; _suspensionStiffness = constructionInfo.SuspensionStiffness; _chassicConnectionPointCS = constructionInfo.ChassicConnectionCS; _wheelAxleCS = constructionInfo.WheelAxleCS; _frictionSlip = constructionInfo.FrictionSlip; _clippedInvContactDotSuspension = 0; _suspensionRelativeVelocity = 0; _wheelsSuspensionForce = 0; _skidInfo = 0; _steering = 0; _engineForce = 0; _rotation = 0; _rotation = 0; _deltaRotation = 0; _brake = 0; _rollInfluence = 0.1f; _brake = 0; _rollInfluence = 0.1f; _isFrontWheel = constructionInfo.IsFrontWheel; _raycastInfo = default(RaycastInfo); _worldTransform = default(Matrix); _clientInfo = null; }