> 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.ksplayercontroller.md).

# Class ksPlayerController

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

Base class for player controllers. Player controllers allow you to write one class that runs on both the client and the server for controlling entity movement using player inputs. The server uses it for authoritative movement, and the client uses it for prediction/latency masking.

```csharp
public abstract class ksPlayerController : ksScriptAsset
```

#### Inheritance

[object](https://learn.microsoft.com/dotnet/api/system.object) ← [ksScriptAsset](/reactor/api-reference/ks.reactor/ks.reactor.ksscriptasset.md) ← [ksPlayerController](/reactor/api-reference/ks.reactor/ks.reactor.ksplayercontroller.md)

#### Inherited Members

[ksScriptAsset.Assets](/reactor/api-reference/ks.reactor/ks.reactor.ksscriptasset.md#KS_Reactor_ksScriptAsset_Assets), [ksScriptAsset.AssetId](/reactor/api-reference/ks.reactor/ks.reactor.ksscriptasset.md#KS_Reactor_ksScriptAsset_AssetId), [ksScriptAsset.AssetPath](/reactor/api-reference/ks.reactor/ks.reactor.ksscriptasset.md#KS_Reactor_ksScriptAsset_AssetPath), [ksScriptAsset.IsPrefab](/reactor/api-reference/ks.reactor/ks.reactor.ksscriptasset.md#KS_Reactor_ksScriptAsset_IsPrefab), [ksScriptAsset.AssetName](/reactor/api-reference/ks.reactor/ks.reactor.ksscriptasset.md#KS_Reactor_ksScriptAsset_AssetName), [ksScriptAsset.Clone()](/reactor/api-reference/ks.reactor/ks.reactor.ksscriptasset.md#KS_Reactor_ksScriptAsset_Clone), [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)

## Properties

### CharacterController <a href="#ks_reactor_ksplayercontroller_charactercontroller" id="ks_reactor_ksplayercontroller_charactercontroller"></a>

Character controller.

```csharp
public ksICharacterController CharacterController { get; }
```

#### Property Value

[ksICharacterController](/reactor/api-reference/ks.reactor/ks.reactor.ksicharactercontroller.md)

### Entity <a href="#ks_reactor_ksplayercontroller_entity" id="ks_reactor_ksplayercontroller_entity"></a>

Entity this player controller is controlling.

```csharp
public ksIEntity Entity { get; }
```

#### Property Value

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

### Input <a href="#ks_reactor_ksplayercontroller_input" id="ks_reactor_ksplayercontroller_input"></a>

Player input.

```csharp
public ksInput Input { get; }
```

#### Property Value

[ksInput](/reactor/api-reference/ks.reactor/ks.reactor.ksinput.md)

### Physics <a href="#ks_reactor_ksplayercontroller_physics" id="ks_reactor_ksplayercontroller_physics"></a>

Physics API.

```csharp
public ksBasePhysics Physics { get; }
```

#### Property Value

[ksBasePhysics](/reactor/api-reference/ks.reactor/ks.reactor.ksbasephysics.md)

### Properties <a href="#ks_reactor_ksplayercontroller_properties" id="ks_reactor_ksplayercontroller_properties"></a>

Entity properties.

```csharp
public ksPropertyMap Properties { get; }
```

#### Property Value

[ksPropertyMap](/reactor/api-reference/ks.reactor/ks.reactor.kspropertymap.md)

### RigidBody <a href="#ks_reactor_ksplayercontroller_rigidbody" id="ks_reactor_ksplayercontroller_rigidbody"></a>

Entity rigid body.

```csharp
public ksIRigidBody RigidBody { get; }
```

#### Property Value

[ksIRigidBody](/reactor/api-reference/ks.reactor/ks.reactor.ksirigidbody.md)

### RigidBody2D <a href="#ks_reactor_ksplayercontroller_rigidbody2d" id="ks_reactor_ksplayercontroller_rigidbody2d"></a>

2D entity rigid body.

```csharp
public ksIRigidBody2D RigidBody2D { get; set; }
```

#### Property Value

[ksIRigidBody2D](/reactor/api-reference/ks.reactor/ks.reactor.ksirigidbody2d.md)

### Time <a href="#ks_reactor_ksplayercontroller_time" id="ks_reactor_ksplayercontroller_time"></a>

Time.

```csharp
public ksTime Time { get; }
```

#### Property Value

[ksTime](/reactor/api-reference/ks.reactor/ks.reactor.kstime.md)

### Transform <a href="#ks_reactor_ksplayercontroller_transform" id="ks_reactor_ksplayercontroller_transform"></a>

Entity transform.

```csharp
public ksTransform Transform { get; }
```

#### Property Value

[ksTransform](/reactor/api-reference/ks.reactor/ks.reactor.kstransform.md)

### Transform2D <a href="#ks_reactor_ksplayercontroller_transform2d" id="ks_reactor_ksplayercontroller_transform2d"></a>

2D entity transform.

```csharp
public ksTransform2D Transform2D { get; }
```

#### Property Value

[ksTransform2D](/reactor/api-reference/ks.reactor/ks.reactor.kstransform2d.md)

### Type <a href="#ks_reactor_ksplayercontroller_type" id="ks_reactor_ksplayercontroller_type"></a>

Player controller type. This must be unique-per class and non-zero.

```csharp
public abstract uint Type { get; }
```

#### Property Value

[uint](https://learn.microsoft.com/dotnet/api/system.uint32)

### UseInputPrediction <a href="#ks_reactor_ksplayercontroller_useinputprediction" id="ks_reactor_ksplayercontroller_useinputprediction"></a>

Should this controller use input prediction? Set this to false in Initialize or in the inspector to disable input prediction. Setting this after Initialize is called will do nothing.

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

#### Property Value

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

## Methods

### Clone() <a href="#ks_reactor_ksplayercontroller_clone" id="ks_reactor_ksplayercontroller_clone"></a>

Creates a copy of the controller with the value of all members tagged with ksEditable or ksCloneable copied. Arrays, lists, and dictionaries are cloned. Other object references will reference the same object.

```csharp
public virtual ksPlayerController Clone()
```

#### Returns

[ksPlayerController](/reactor/api-reference/ks.reactor/ks.reactor.ksplayercontroller.md)

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

Called after properties are initialized.

```csharp
public virtual void Initialize()
```

### RegisterInputs(ksInputRegistrar) <a href="#ks_reactor_ksplayercontroller_registerinputs_ks_reactor_ksinputregistrar" id="ks_reactor_ksplayercontroller_registerinputs_ks_reactor_ksinputregistrar"></a>

Register all buttons and axes you will be using here.

```csharp
public abstract void RegisterInputs(ksInputRegistrar registrar)
```

#### Parameters

`registrar` [ksInputRegistrar](/reactor/api-reference/ks.reactor/ks.reactor.ksinputregistrar.md)

Registrar to register with.

### Update() <a href="#ks_reactor_ksplayercontroller_update" id="ks_reactor_ksplayercontroller_update"></a>

Called every frame.

```csharp
public abstract void Update()
```
