> 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.client.unity/ks.reactor.client.unity.ksconverginginputpredictorasset.md).

# Class ksConvergingInputPredictorAsset

Namespace: [KS.Reactor.Client.Unity](/reactor/api-reference/ks.reactor.client.unity.md)\
Assembly: KSUnity-Source.dll

Predictor asset that creates instances of [ksConvergingInputPredictor](/reactor/api-reference/ks.reactor.client/ks.reactor.client.ksconverginginputpredictor.md) when assigned in the entity or room type inspector.

```csharp
[CreateAssetMenu(menuName = "Reactor/Converging Input Predictor", order = 80)]
public class ksConvergingInputPredictorAsset : ksPredictor, ksIPredictor
```

#### Inheritance

[object](https://learn.microsoft.com/dotnet/api/system.object) â† Object â† ScriptableObject â† [ksPredictor](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md) â† [ksConvergingInputPredictorAsset](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.ksconverginginputpredictorasset.md)

#### Implements

[ksIPredictor](/reactor/api-reference/ks.reactor.client/ks.reactor.client.ksipredictor.md)

#### Inherited Members

[ksPredictor.Room](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_Room), [ksPredictor.Entity](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_Entity), [ksPredictor.Player](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_Player), [ksPredictor.Time](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_Time), [ksPredictor.Controller](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_Controller), [ksPredictor.RequiresController](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_RequiresController), [ksPredictor.CreateInstance()](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_CreateInstance), [ksPredictor.Initialize(ksBaseRoom, ksBaseEntity, ksBasePlayer)](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_Initialize_KS_Reactor_Client_ksBaseRoom_KS_Reactor_Client_ksBaseEntity_KS_Reactor_Client_ksBasePlayer_), [ksPredictor.Initialize()](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_Initialize), [ksPredictor.ParentChange(ksBaseEntity, ksBaseEntity)](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_ParentChange_KS_Reactor_Client_ksBaseEntity_KS_Reactor_Client_ksBaseEntity_), [ksPredictor.Enabled()](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_Enabled), [ksPredictor.Disabled()](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_Disabled), [ksPredictor.Detached()](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_Detached), [ksPredictor.IsPredictedProperty(uint)](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_IsPredictedProperty_System_UInt32_), [ksPredictor.ServerUpdate(ksReadOnlyTransformState, Dictionary\<uint, ksMultiType>, bool, bool)](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_ServerUpdate_KS_Reactor_ksReadOnlyTransformState_System_Collections_Generic_Dictionary_System_UInt32_KS_Reactor_ksMultiType__System_Boolean_System_Boolean_), [ksPredictor.ClientUpdate(ksTransformState, Dictionary\<uint, ksMultiType>)](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_ClientUpdate_KS_Reactor_ksTransformState_System_Collections_Generic_Dictionary_System_UInt32_KS_Reactor_ksMultiType__), [ksPredictor.InputUpdate(ksInput)](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.kspredictor.md#KS_Reactor_Client_Unity_ksPredictor_InputUpdate_KS_Reactor_ksInput_), ScriptableObject.SetDirty(), ScriptableObject.CreateInstance(string), ScriptableObject.CreateInstance(Type), ScriptableObject.CreateInstance\<T>(), Object.GetInstanceID(), Object.GetHashCode(), Object.Equals(object), Object.Instantiate(Object, Vector3, Quaternion), Object.Instantiate(Object, Vector3, Quaternion, Transform), Object.Instantiate(Object), Object.Instantiate(Object, Transform), Object.Instantiate(Object, Transform, bool), Object.Instantiate\<T>(T), Object.Instantiate\<T>(T, Vector3, Quaternion), Object.Instantiate\<T>(T, Vector3, Quaternion, Transform), Object.Instantiate\<T>(T, Transform), Object.Instantiate\<T>(T, Transform, bool), Object.Destroy(Object, float), Object.Destroy(Object), Object.DestroyImmediate(Object, bool), Object.DestroyImmediate(Object), Object.FindObjectsOfType(Type), Object.FindObjectsOfType(Type, bool), Object.FindObjectsByType(Type, FindObjectsSortMode), Object.FindObjectsByType(Type, FindObjectsInactive, FindObjectsSortMode), Object.DontDestroyOnLoad(Object), Object.DestroyObject(Object, float), Object.DestroyObject(Object), Object.FindSceneObjectsOfType(Type), Object.FindObjectsOfTypeIncludingAssets(Type), Object.FindObjectsOfType\<T>(), Object.FindObjectsByType\<T>(FindObjectsSortMode), Object.FindObjectsOfType\<T>(bool), Object.FindObjectsByType\<T>(FindObjectsInactive, FindObjectsSortMode), Object.FindObjectOfType\<T>(), Object.FindObjectOfType\<T>(bool), Object.FindFirstObjectByType\<T>(), Object.FindAnyObjectByType\<T>(), Object.FindFirstObjectByType\<T>(FindObjectsInactive), Object.FindAnyObjectByType\<T>(FindObjectsInactive), Object.FindObjectsOfTypeAll(Type), Object.FindObjectOfType(Type), Object.FindFirstObjectByType(Type), Object.FindAnyObjectByType(Type), Object.FindObjectOfType(Type, bool), Object.FindFirstObjectByType(Type, FindObjectsInactive), Object.FindAnyObjectByType(Type, FindObjectsInactive), Object.ToString(), Object.name, Object.hideFlags, [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)

## Constructors

### ksConvergingInputPredictorAsset() <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset__ctor" id="ks_reactor_client_unity_ksconverginginputpredictorasset__ctor"></a>

Constructor

```csharp
public ksConvergingInputPredictorAsset()
```

## Fields

### AngularVelocityTolerance <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_angularvelocitytolerance" id="ks_reactor_client_unity_ksconverginginputpredictorasset_angularvelocitytolerance"></a>

```csharp
[Tooltip("Maximum difference between server and predicted angular velocity before inputs are replayed. Less than or equal to zero for no limit.")]
public float AngularVelocityTolerance
```

#### Field Value

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

### CheckKinematicDynamicCollisions <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_checkkinematicdynamiccollisions" id="ks_reactor_client_unity_ksconverginginputpredictorasset_checkkinematicdynamiccollisions"></a>

```csharp
[Tooltip("If true and the controlled entity is a kinematic rigid body, will check for collisions with dynamic rigid bodies when updating the render position to prevent the render position from embedding with dynamic rigid bodies that will get pushed out of the way.")]
public bool CheckKinematicDynamicCollisions
```

#### Field Value

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

### ConvergeMultiplier <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_convergemultiplier" id="ks_reactor_client_unity_ksconverginginputpredictorasset_convergemultiplier"></a>

```csharp
[Tooltip("Lower values make the predictor try to converge more aggressively")]
public float ConvergeMultiplier
```

#### Field Value

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

### DefaultLatency <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_defaultlatency" id="ks_reactor_client_unity_ksconverginginputpredictorasset_defaultlatency"></a>

```csharp
[Tooltip("Latency in seconds to use in calculations before the real latency is determined.")]
public float DefaultLatency
```

#### Field Value

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

### MaxDeltaTime <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_maxdeltatime" id="ks_reactor_client_unity_ksconverginginputpredictorasset_maxdeltatime"></a>

```csharp
[Tooltip("Maximum time step for the client over a single frame. Limiting the maximum time step can improve behaviour when there are dips in frame rate.")]
public float MaxDeltaTime
```

#### Field Value

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

### MaxSlideAngle <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_maxslideangle" id="ks_reactor_client_unity_ksconverginginputpredictorasset_maxslideangle"></a>

```csharp
[Tooltip("Do not allow slides that change the movement direction by more than this angle in degrees. Less than zero for no limit.")]
[Range(-1, 90)]
public float MaxSlideAngle
```

#### Field Value

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

### MaxTotalSlideAngle <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_maxtotalslideangle" id="ks_reactor_client_unity_ksconverginginputpredictorasset_maxtotalslideangle"></a>

```csharp
[Tooltip("Do not allow sliding in a direction that differs from the original direction by more than this angle in degrees. Less than zero for no limit.")]
[Range(-1, 180)]
public float MaxTotalSlideAngle
```

#### Field Value

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

### PredictedProperties <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_predictedproperties" id="ks_reactor_client_unity_ksconverginginputpredictorasset_predictedproperties"></a>

```csharp
[Tooltip("Which properties to predict and how to predict them.")]
public ksConvergingInputPredictorAsset.PropertyBehaviour[] PredictedProperties
```

#### Field Value

[ksConvergingInputPredictorAsset](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.ksconverginginputpredictorasset.md).[PropertyBehaviour](/reactor/api-reference/ks.reactor.client.unity/ks.reactor.client.unity.ksconverginginputpredictorasset/ks.reactor.client.unity.ksconverginginputpredictorasset.propertybehaviour.md)\[]

### SeparationOffset <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_separationoffset" id="ks_reactor_client_unity_ksconverginginputpredictorasset_separationoffset"></a>

```csharp
[Min(0)]
[Tooltip("Keep this much distance between other objects. Helps prevent penetrations.")]
public float SeparationOffset
```

#### Field Value

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

### SweepAndSlideIterations <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_sweepandslideiterations" id="ks_reactor_client_unity_ksconverginginputpredictorasset_sweepandslideiterations"></a>

```csharp
[Range(1, 10)]
[Tooltip("Max number of sweep-and-slide iterations for predicting collisions. One to stop after the first sweep without sliding.")]
public int SweepAndSlideIterations
```

#### Field Value

[int](https://learn.microsoft.com/dotnet/api/system.int32)

### TunnelDistance <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_tunneldistance" id="ks_reactor_client_unity_ksconverginginputpredictorasset_tunneldistance"></a>

```csharp
[Tooltip("Maximum distance between client and server before the client will tunnel through objects to get to the server position.")]
public float TunnelDistance
```

#### Field Value

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

### UseClientOnlyPosition <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_useclientonlyposition" id="ks_reactor_client_unity_ksconverginginputpredictorasset_useclientonlyposition"></a>

```csharp
[Tooltip("If true, converging prediction is not run on position and the player controller alone determines the client position.")]
public bool UseClientOnlyPosition
```

#### Field Value

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

### UseClientOnlyRotation <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_useclientonlyrotation" id="ks_reactor_client_unity_ksconverginginputpredictorasset_useclientonlyrotation"></a>

```csharp
[Tooltip("If true, converging prediction is not run on rotation and the player controller alone determines the client rotation.")]
public bool UseClientOnlyRotation
```

#### Field Value

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

### UseClientOnlyScale <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_useclientonlyscale" id="ks_reactor_client_unity_ksconverginginputpredictorasset_useclientonlyscale"></a>

```csharp
[Tooltip("If true, converging prediction is not run on scale and the player controller alone determines the client scale.")]
public bool UseClientOnlyScale
```

#### Field Value

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

### VelocityTolerance <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_velocitytolerance" id="ks_reactor_client_unity_ksconverginginputpredictorasset_velocitytolerance"></a>

```csharp
[Tooltip("Maximum difference between server and predicted velocity before inputs are replayed. Less than or equal to zero for no limit.")]
public float VelocityTolerance
```

#### Field Value

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

## Properties

### RequiresController <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_requirescontroller" id="ks_reactor_client_unity_ksconverginginputpredictorasset_requirescontroller"></a>

Does the predictor require a player controller?

```csharp
public override bool RequiresController { get; }
```

#### Property Value

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

## Methods

### CalculateMaxSizeXZ(ksBaseEntity) <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_calculatemaxsizexz_ks_reactor_client_ksbasee" id="ks_reactor_client_unity_ksconverginginputpredictorasset_calculatemaxsizexz_ks_reactor_client_ksbasee"></a>

Finds the largest collider size along the x or z axis. Returns one if the entity has no colliders.

```csharp
public static float CalculateMaxSizeXZ(ksBaseEntity baseEntity)
```

#### Parameters

`baseEntity` [ksBaseEntity](/reactor/api-reference/ks.reactor.client/ks.reactor.client.ksbaseentity.md)

Entity to calculate velocity tolerance for.

#### Returns

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

Largest collider size along the x or z axis.

### CreateInstance() <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_createinstance" id="ks_reactor_client_unity_ksconverginginputpredictorasset_createinstance"></a>

Creates an instance of the predictor.

```csharp
public override ksIPredictor CreateInstance()
```

#### Returns

[ksIPredictor](/reactor/api-reference/ks.reactor.client/ks.reactor.client.ksipredictor.md)

Predictor instance.

### Initialize() <a href="#ks_reactor_client_unity_ksconverginginputpredictorasset_initialize" id="ks_reactor_client_unity_ksconverginginputpredictorasset_initialize"></a>

Logs an error stating the predictor cannot be used directly and to call [CreateInstance](#KS_Reactor_Client_Unity_ksConvergingInputPredictorAsset_CreateInstance) instead.

```csharp
public override bool Initialize()
```

#### Returns

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

false
