public void GetWheelTransform(int unitIndex, int axleIndex, int axleSide, ref Vector3 position, ref Quaternion rotation) { if (IntPtr.Zero != VsVehicleHandle) { Check(VS_Vehicle.IsValidVehicle(VsVehicleHandle)); if (VS_Vehicle.IsOk(VsVehicleHandle)) { double forward = 0; double left = 0; double up = 0; double rollRightRad = 0; double pitchDownRad = 0; double yawLeftRad = 0; VS_Vehicle.GetTireWorldPosition(VsVehicleHandle, unitIndex, axleIndex, axleSide, ref forward, ref left, ref up); VS_Vehicle.GetTireWorldOrientation(VsVehicleHandle, unitIndex, axleIndex, axleSide, ref rollRightRad, ref pitchDownRad, ref yawLeftRad); position = VsUnityLib.VSToUnityVector(forward, left, up); rotation = VsUnityLib.VSToUnityRotation(rollRightRad, pitchDownRad, yawLeftRad); //Log(rollRightRad + "," + pitchDownRad + "," + yawLeftRad); //CarSim_UnityLib.SetUnityTransformFromSolverValues(wheelGameObject, (float)forward, (float)left, (float)up, (float)rollRightRad, (float)pitchDownRad, (float)yawLeftRad); } } }
public Vector3 GetUnitWorldPosition(int unitIndex) { double forward = 0, left = 0, up = 0; VS_Vehicle.GetWorldPosition(VsVehicleHandle, unitIndex, ref forward, ref left, ref up); Vector3 worldLocation = VsUnityLib.VSToUnityVector(forward, left, up); return(worldLocation); }
/// <summary> /// set unity transform from vs vehicle infomation. /// </summary> /// <param name="gameObject"></param> /// <param name="forward"></param> /// <param name="left"></param> /// <param name="up"></param> /// <param name="roll"></param> /// <param name="pitch"></param> /// <param name="yaw"></param> static public void SetUnityTransformFromSolverValues(GameObject gameObject, float forward, float left, float up, float roll, float pitch, float yaw) { gameObject.transform.position = VsUnityLib.VSToUnityVector(forward, left, up); gameObject.transform.rotation = VsUnityLib.VSToUnityRotation(roll, pitch, yaw); }
bool RoadInfoCallback(IntPtr callbackData , double carSimX0 , double carSimY0 , double carSimZ0 , double carSimX1 , double carSimY1 , double carSimZ1 , ref BestMedia.VsDotnet.vs_vehicle.VsRoadInfo out_roadInfo) { bool retSuccess = false; var MovementComponent = VsUtility.ToObject(callbackData) as CarSimMovementComponent; Vector3 StartVect = VsUnityLib.VSToUnityVector(carSimX0, carSimY0, carSimZ0); Vector3 EndVect = VsUnityLib.VSToUnityVector(carSimX1, carSimY1, carSimZ1); Vector3 DirVect = EndVect - StartVect; DirVect.Normalize(); Ray ray = new Ray(StartVect, DirVect); RaycastHit HitResult; bool roadPointFound = Physics.Raycast(ray, out HitResult, (StartVect - EndVect).magnitude, RayLayerMask, QueryTriggerInteraction.Ignore); if (DebugShowRay) { Debug.DrawRay(ray.origin, ray.direction * (StartVect - EndVect).magnitude, Color.red, 0.1f); } if (!roadPointFound) { Check(retSuccess == false); } else { if (HitResult.normal.y == 0) { Check(retSuccess == false); } else { HitResult.point.UnityToVSVector(ref out_roadInfo.mCarSimLocX, ref out_roadInfo.mCarSimLocY, ref out_roadInfo.mCarSimLocZ); double nx = 0, ny = 0, nz = 0; HitResult.normal.UnityToVSVector(ref nx, ref ny, ref nz); out_roadInfo.mCarSimDzDx = nz / nx; out_roadInfo.mCarSimDzDy = nz / ny; if (HitResult.collider != null && HitResult.collider.material != null) { out_roadInfo.mCarSimMu = HitResult.collider.material.dynamicFriction; } else { out_roadInfo.mCarSimMu = 0.85f; } out_roadInfo.mCollisionInfo = IntPtr.Zero; retSuccess = true; } } return(retSuccess); }