// public float distance { get; private set; } // public Transform transform { get; private set; } internal void PopulateFields(IntPtr vehicle, int wheelNum) { IntPtr hitActor = PhysXLib.GetGroundHitActor(vehicle, wheelNum); PhysXBody body = PhysXSceneManager.GetBodyFromPointer(hitActor); IntPtr shape = PhysXLib.GetGroundHitShape(vehicle, wheelNum); collider = body.GetColliderFromShape(shape); PhysXLib.GetGroundHitPosition(vehicle, wheelNum, _pxpoint); _pxpoint.ToVector(ref _point); }
internal void PopulateFields() { IntPtr hitActor = PhysXLib.GetRaycastHitActor(physXRaycastHit); PhysXBody body = PhysXSceneManager.GetBodyFromPointer(hitActor); transform = body.transform; IntPtr shape = PhysXLib.GetRaycastHitShape(physXRaycastHit); collider = body.GetColliderFromShape(shape); distance = PhysXLib.GetRaycastHitDistance(physXRaycastHit); PhysXLib.GetRaycastHitNormal(physXRaycastHit, _pxnormal); _pxnormal.ToVector(ref _normal); PhysXLib.GetRaycastHitPoint(physXRaycastHit, _pxpoint); _pxpoint.ToVector(ref _point); }
internal void FromPhysXInternalCollision(IntPtr pairHeader, IntPtr pairs, int pairCount, IntPtr self, bool isEnter, bool isStay, bool isExit) { this.self = self; this.isEnter = isEnter; this.isStay = isStay; this.isExit = isExit; otherActor = PhysXLib.GetPairHeaderActor(pairHeader, 0); int otherNum = 0; if (otherActor == self) { otherNum = 1; otherActor = PhysXLib.GetPairHeaderActor(pairHeader, otherNum); } PhysXLib.GetPosition(self, initialPosSelf); ownInitialPosition = initialPosSelf.ToVector(); PhysXLib.GetRotation(self, initialRotSelf); ownInitialRotation = initialRotSelf.ToQuaternion(); impulse = Vector3.zero; for (int i = 0; i < pairCount; i++) { IntPtr colliderShape = PhysXLib.GetContactPairShape(pairs, i, otherNum); IntPtr ownShape = PhysXLib.GetContactPairShape(pairs, i, 1 - otherNum); IntPtr iter = PhysXLib.GetContactPointIterator(pairs, i); int j = 0; while (PhysXLib.NextContactPatch(iter)) { while (PhysXLib.NextContactPoint(iter)) { float separation = PhysXLib.GetContactPointData(iter, j, pairs, i, pointPos, pointNormal, pointImpulse); PhysXContactPoint contactPoint = PhysXContactPoint.GetContactPoint(); contactPoint.colliderShape = colliderShape; contactPoint.ownShape = ownShape; contactPoint.point = pointPos.ToVector(); if (otherNum == 1) { contactPoint.normal = pointNormal.ToVector(); contactPoint.impulse = pointImpulse.ToVector(); } else { contactPoint.normal = -pointNormal.ToVector(); contactPoint.impulse = -pointImpulse.ToVector(); } contactPoint.separation = separation; contactPoints.Add(contactPoint); impulse += contactPoint.impulse; j++; } } } // impulse /= contactCount; }