> For the complete documentation index, see [llms.txt](https://kinematicsoup.gitbook.io/reactor/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kinematicsoup.gitbook.io/reactor/api-reference/ks.reactor/ks.reactor.ksbasephysics.md).

# Class ksBasePhysics

Namespace: [KS.Reactor](/reactor/api-reference/ks.reactor.md)\
Assembly: KSCommon.dll

Base physics class available on client and server.

```csharp
public abstract class ksBasePhysics
```

#### Inheritance

[object](https://learn.microsoft.com/dotnet/api/system.object) â† [ksBasePhysics](/reactor/api-reference/ks.reactor/ks.reactor.ksbasephysics.md)

#### Derived

[ksPhysicsAdaptor](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.ksphysicsadaptor.md)

#### Inherited Members

[object.Equals(object)](https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals\(system-object\)), [object.Equals(object, object)](https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals\(system-object-system-object\)), [object.GetHashCode()](https://learn.microsoft.com/dotnet/api/system.object.gethashcode), [object.GetType()](https://learn.microsoft.com/dotnet/api/system.object.gettype), [object.MemberwiseClone()](https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone), [object.ReferenceEquals(object, object)](https://learn.microsoft.com/dotnet/api/system.object.referenceequals), [object.ToString()](https://learn.microsoft.com/dotnet/api/system.object.tostring)

## Fields

### m\_gravity <a href="#ks_reactor_ksbasephysics_m_gravity" id="ks_reactor_ksbasephysics_m_gravity"></a>

```csharp
protected ksVector3 m_gravity
```

#### Field Value

[ksVector3](/reactor/api-reference/ks.reactor/ks.reactor.ksvector3.md)

## Properties

### AutoSync <a href="#ks_reactor_ksbasephysics_autosync" id="ks_reactor_ksbasephysics_autosync"></a>

If true, transform changes are synced with the physics system and stale inertia tensors and centers of mass are recalculated automatically before any physics queries. If this is false, changes are only synced during the simulation step, and you are responsible for calling Sync if you want to sync changes sooner. Syncing physics changes is disabled when scripts are running in parallel, so instead if this is true, physics changes will be synced before running parallel scripts.

```csharp
public bool AutoSync { get; set; }
```

#### Property Value

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

### Gravity <a href="#ks_reactor_ksbasephysics_gravity" id="ks_reactor_ksbasephysics_gravity"></a>

Gets the current gravity in the scene.

```csharp
public ksVector3 Gravity { get; }
```

#### Property Value

[ksVector3](/reactor/api-reference/ks.reactor/ks.reactor.ksvector3.md)

## Methods

### ComputePenetration(ksICollider, ksVector3, ksQuaternion, ksICollider, ksVector3, ksQuaternion, out ksVector3, out float) <a href="#ks_reactor_ksbasephysics_computepenetration_ks_reactor_ksicollider_ks_reactor_ksvector3_ks_reactor_k" id="ks_reactor_ksbasephysics_computepenetration_ks_reactor_ksicollider_ks_reactor_ksvector3_ks_reactor_k"></a>

Compute the minimal translation required to separate the given colliders apart at specified poses.

```csharp
public abstract bool ComputePenetration(ksICollider collider0, ksVector3 position0, ksQuaternion rotation0, ksICollider collider1, ksVector3 position1, ksQuaternion rotation1, out ksVector3 direction, out float distance)
```

#### Parameters

`collider0` [ksICollider](/reactor/api-reference/ks.reactor/ks.reactor.ksicollider.md)

First collider to test.

`position0` [ksVector3](/reactor/api-reference/ks.reactor/ks.reactor.ksvector3.md)

Position of collider 0.

`rotation0` [ksQuaternion](/reactor/api-reference/ks.reactor/ks.reactor.ksquaternion.md)

Rotation of collider 0.

`collider1` [ksICollider](/reactor/api-reference/ks.reactor/ks.reactor.ksicollider.md)

Secoond collider to test.

`position1` [ksVector3](/reactor/api-reference/ks.reactor/ks.reactor.ksvector3.md)

Position of collider 1.

`rotation1` [ksQuaternion](/reactor/api-reference/ks.reactor/ks.reactor.ksquaternion.md)

Rotation of collider 1.

`direction` [ksVector3](/reactor/api-reference/ks.reactor/ks.reactor.ksvector3.md)

Direction along which the translation required to separate `collider0` from `collider1` is minimal.

`distance` [float](https://learn.microsoft.com/dotnet/api/system.single)

The distance along the direction that is required to separate `collider0` from `collider1`.

#### Returns

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

True if the colliders were overlapping.

### CreateSimulationQueryParams(ksIEntity, bool) <a href="#ks_reactor_ksbasephysics_createsimulationqueryparams_ks_reactor_ksientity_system_boolean" id="ks_reactor_ksbasephysics_createsimulationqueryparams_ks_reactor_ksientity_system_boolean"></a>

Creates [ksSweepSlideParams](/reactor/api-reference/ks.reactor/ks.reactor.kssweepslideparams.md) for an entity configured to use simulation rules. Anything the entity would collide with are blocking hits and optionally anything it would receive overlap events with are touching hits. This sets the [Filter](/reactor/api-reference/ks.reactor/ks.reactor.ksbasequeryparams.md#KS_Reactor_ksBaseQueryParams_Filter) and [EntityColliderFilter](/reactor/api-reference/ks.reactor/ks.reactor.ksoverlapparams.md#KS_Reactor_ksOverlapParams_EntityColliderFilter) to a [ksSimulationFilter](/reactor/api-reference/ks.reactor/ks.reactor.kssimulationfilter.md), and sets the [ExcludeEntity](/reactor/api-reference/ks.reactor/ks.reactor.ksbasequeryparams.md#KS_Reactor_ksBaseQueryParams_ExcludeEntity) to the `entity`.

```csharp
public ksSweepSlideParams CreateSimulationQueryParams(ksIEntity entity, bool excludeTouches = true)
```

#### Parameters

`entity` [ksIEntity](/reactor/api-reference/ks.reactor/ks.reactor.ksientity.md)

Query entity

`excludeTouches` [bool](https://learn.microsoft.com/dotnet/api/system.boolean)

If true, sets the [EXCLUDE\_TOUCHES](/reactor/api-reference/ks.reactor/ks.reactor.ksqueryflags.md#KS_Reactor_ksQueryFlags_EXCLUDE_TOUCHES) flag.

#### Returns

[ksSweepSlideParams](/reactor/api-reference/ks.reactor/ks.reactor.kssweepslideparams.md)

Overlap params using simulation rules.

### Depenetrate(ksOverlapParams, out ksVector3, DepenetrateCallback, float) <a href="#ks_reactor_ksbasephysics_depenetrate_ks_reactor_ksoverlapparams_ks_reactor_ksvector3__ks_reactor_ksb" id="ks_reactor_ksbasephysics_depenetrate_ks_reactor_ksoverlapparams_ks_reactor_ksvector3__ks_reactor_ksb"></a>

Does an overlap query and calcuates a depenetration delta to attempt to depenetrate from overlapping geometry. If the overlap query returns multiple results the depenetration vector from the previous overlap will be added to the position when computing the depenetration vector for the next overlap. This may result in pushing the object back into the first overlapping geometry. Geometry that the object gets pushed into by the depenetration vector that was not initially overlapping will not be considered.

```csharp
public bool Depenetrate(ksOverlapParams args, out ksVector3 delta, ksBasePhysics.DepenetrateCallback callback = null, float separationOffset = 0.0001)
```

#### Parameters

`args` [ksOverlapParams](/reactor/api-reference/ks.reactor/ks.reactor.ksoverlapparams.md)

Overlap query parameters. The query object cannot be a shape.

`delta` [ksVector3](/reactor/api-reference/ks.reactor/ks.reactor.ksvector3.md)

Depenetration delta

`callback` [ksBasePhysics](/reactor/api-reference/ks.reactor/ks.reactor.ksbasephysics.md).[DepenetrateCallback](/reactor/api-reference/ks.reactor/ks.reactor.ksbasephysics/ks.reactor.ksbasephysics.depenetratecallback.md)

Callback to call for each overlapping collider. Can be used to alter the depenetration vector for each collider, or to cancel the entire depenetration by returning false.

`separationOffset` [float](https://learn.microsoft.com/dotnet/api/system.single)

Amount to add to the depenetration distance for each overlapping collider. Helps prevent penetrations when sweeping.

#### Returns

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

True if there was a penetration.

### GetClosestPoint(ksVector3, ksICollider) <a href="#ks_reactor_ksbasephysics_getclosestpoint_ks_reactor_ksvector3_ks_reactor_ksicollider" id="ks_reactor_ksbasephysics_getclosestpoint_ks_reactor_ksvector3_ks_reactor_ksicollider"></a>

Get the closest point on a collider to another point. Currently supported colliders: box, sphere, capsule, convexmesh.

```csharp
public abstract ksVector3 GetClosestPoint(ksVector3 point, ksICollider collider)
```

#### Parameters

`point` [ksVector3](/reactor/api-reference/ks.reactor/ks.reactor.ksvector3.md)

Point to measure from.

`collider` [ksICollider](/reactor/api-reference/ks.reactor/ks.reactor.ksicollider.md)

Collider to get the closest point from.

#### Returns

[ksVector3](/reactor/api-reference/ks.reactor/ks.reactor.ksvector3.md)

Closest point on the collider.

### GetClosestPoint(ksVector3, ksICollider, ksVector3, ksQuaternion) <a href="#ks_reactor_ksbasephysics_getclosestpoint_ks_reactor_ksvector3_ks_reactor_ksicollider_ks_reactor_ksve" id="ks_reactor_ksbasephysics_getclosestpoint_ks_reactor_ksvector3_ks_reactor_ksicollider_ks_reactor_ksve"></a>

Get the closest point on a collider to another point. Currently supported colliders: box, sphere, capsule, convexmesh.

```csharp
public abstract ksVector3 GetClosestPoint(ksVector3 point, ksICollider collider, ksVector3 position, ksQuaternion rotation)
```

#### Parameters

`point` [ksVector3](/reactor/api-reference/ks.reactor/ks.reactor.ksvector3.md)

Point to measure from.

`collider` [ksICollider](/reactor/api-reference/ks.reactor/ks.reactor.ksicollider.md)

Collider to get the closest point from.

`position` [ksVector3](/reactor/api-reference/ks.reactor/ks.reactor.ksvector3.md)

Collider position

`rotation` [ksQuaternion](/reactor/api-reference/ks.reactor/ks.reactor.ksquaternion.md)

Collider rotation

#### Returns

[ksVector3](/reactor/api-reference/ks.reactor/ks.reactor.ksvector3.md)

Closest point on the collider.

### Overlap(ksOverlapParams) <a href="#ks_reactor_ksbasephysics_overlap_ks_reactor_ksoverlapparams" id="ks_reactor_ksbasephysics_overlap_ks_reactor_ksoverlapparams"></a>

Overlap query.

```csharp
public abstract List<ksOverlapResult> Overlap(ksOverlapParams args)
```

#### Parameters

`args` [ksOverlapParams](/reactor/api-reference/ks.reactor/ks.reactor.ksoverlapparams.md)

Overlap parameters

#### Returns

[List](https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1)<[ksOverlapResult](/reactor/api-reference/ks.reactor/ks.reactor.ksoverlapresult.md)>

List of overlap results.

### OverlapAny(ksOverlapParams) <a href="#ks_reactor_ksbasephysics_overlapany_ks_reactor_ksoverlapparams" id="ks_reactor_ksbasephysics_overlapany_ks_reactor_ksoverlapparams"></a>

Overlap query that checks for any overlap.

```csharp
public abstract bool OverlapAny(ksOverlapParams args)
```

#### Parameters

`args` [ksOverlapParams](/reactor/api-reference/ks.reactor/ks.reactor.ksoverlapparams.md)

Overlap parameters

#### Returns

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

True if anything was overlapping.

### Raycast(ksRaycastParams) <a href="#ks_reactor_ksbasephysics_raycast_ks_reactor_ksraycastparams" id="ks_reactor_ksbasephysics_raycast_ks_reactor_ksraycastparams"></a>

Raycast query that returns the nearest blocking hit and any touching hits before the blocking hit.

```csharp
public abstract ksQueryHitResults<ksRaycastResult> Raycast(ksRaycastParams args)
```

#### Parameters

`args` [ksRaycastParams](/reactor/api-reference/ks.reactor/ks.reactor.ksraycastparams.md)

Raycast parameters

#### Returns

[ksQueryHitResults](/reactor/api-reference/ks.reactor/ks.reactor.ksqueryhitresults-1.md)<[ksRaycastResult](/reactor/api-reference/ks.reactor/ks.reactor.ksraycastresult.md)>

Raycast results

### RaycastAny(ksRaycastParams) <a href="#ks_reactor_ksbasephysics_raycastany_ks_reactor_ksraycastparams" id="ks_reactor_ksbasephysics_raycastany_ks_reactor_ksraycastparams"></a>

Raycast query that checks if anything was hit.

```csharp
public abstract bool RaycastAny(ksRaycastParams args)
```

#### Parameters

`args` [ksRaycastParams](/reactor/api-reference/ks.reactor/ks.reactor.ksraycastparams.md)

Raycast parameters

#### Returns

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

True if the raycast hit anything.

### RaycastNearest(ksRaycastParams, out ksRaycastResult) <a href="#ks_reactor_ksbasephysics_raycastnearest_ks_reactor_ksraycastparams_ks_reactor_ksraycastresult" id="ks_reactor_ksbasephysics_raycastnearest_ks_reactor_ksraycastparams_ks_reactor_ksraycastresult"></a>

Raycast query that finds the nearest hit.

```csharp
public abstract bool RaycastNearest(ksRaycastParams args, out ksRaycastResult hit)
```

#### Parameters

`args` [ksRaycastParams](/reactor/api-reference/ks.reactor/ks.reactor.ksraycastparams.md)

Raycast parameters

`hit` [ksRaycastResult](/reactor/api-reference/ks.reactor/ks.reactor.ksraycastresult.md)

Set to the nearest hit.

#### Returns

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

True if the raycast hit anything.

### Sweep(ksSweepParams) <a href="#ks_reactor_ksbasephysics_sweep_ks_reactor_kssweepparams" id="ks_reactor_ksbasephysics_sweep_ks_reactor_kssweepparams"></a>

Sweep query that returns the nearest blocking hit and any touching hits before the blocking hit.

```csharp
public abstract ksQueryHitResults<ksSweepResult> Sweep(ksSweepParams arg)
```

#### Parameters

`arg` [ksSweepParams](/reactor/api-reference/ks.reactor/ks.reactor.kssweepparams.md)

Sweep parameters

#### Returns

[ksQueryHitResults](/reactor/api-reference/ks.reactor/ks.reactor.ksqueryhitresults-1.md)<[ksSweepResult](/reactor/api-reference/ks.reactor/ks.reactor.kssweepresult.md)>

Sweep results

### SweepAndSlide(ksSweepSlideParams, out ksVector3) <a href="#ks_reactor_ksbasephysics_sweepandslide_ks_reactor_kssweepslideparams_ks_reactor_ksvector3" id="ks_reactor_ksbasephysics_sweepandslide_ks_reactor_kssweepslideparams_ks_reactor_ksvector3"></a>

Does sweep-and-slide movement. When a sweep hits something, the remaining movement vector is projected onto the plane perpendicuar to the surface normal to get a new movement vector which is used to sweep recursively.

```csharp
public bool SweepAndSlide(ksSweepSlideParams args, out ksVector3 position)
```

#### Parameters

`args` [ksSweepSlideParams](/reactor/api-reference/ks.reactor/ks.reactor.kssweepslideparams.md)

Sweep parameters

`position` [ksVector3](/reactor/api-reference/ks.reactor/ks.reactor.ksvector3.md)

Position at the end of the sweep-and-slide movement.

#### Returns

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

True if the sweep and slide hit anything.

### SweepAny(ksSweepParams) <a href="#ks_reactor_ksbasephysics_sweepany_ks_reactor_kssweepparams" id="ks_reactor_ksbasephysics_sweepany_ks_reactor_kssweepparams"></a>

Sweep query that checks if anything was hit.

```csharp
public abstract bool SweepAny(ksSweepParams args)
```

#### Parameters

`args` [ksSweepParams](/reactor/api-reference/ks.reactor/ks.reactor.kssweepparams.md)

Sweep arguments

#### Returns

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

True if the sweep hit anything.

### SweepNearest(ksSweepParams, out ksSweepResult) <a href="#ks_reactor_ksbasephysics_sweepnearest_ks_reactor_kssweepparams_ks_reactor_kssweepresult" id="ks_reactor_ksbasephysics_sweepnearest_ks_reactor_kssweepparams_ks_reactor_kssweepresult"></a>

Sweep query that finds the nearest hit.

```csharp
public abstract bool SweepNearest(ksSweepParams args, out ksSweepResult hit)
```

#### Parameters

`args` [ksSweepParams](/reactor/api-reference/ks.reactor/ks.reactor.kssweepparams.md)

Sweep arguments

`hit` [ksSweepResult](/reactor/api-reference/ks.reactor/ks.reactor.kssweepresult.md)

Set to the nearest hit.

#### Returns

[bool](https://learn.microsoft.com/dotnet/api/system.boolean)

True if the sweep hit anything.

### SyncAll() <a href="#ks_reactor_ksbasephysics_syncall" id="ks_reactor_ksbasephysics_syncall"></a>

Apply all transform and rigidbody changes to the physics simulation now rather than waiting for the next simulation step.

```csharp
public virtual void SyncAll()
```

### SyncTransforms() <a href="#ks_reactor_ksbasephysics_synctransforms" id="ks_reactor_ksbasephysics_synctransforms"></a>

Apply entity transform updates to the physics simulation now rather than waiting for the next simulation step.

```csharp
public virtual void SyncTransforms()
```
