> For the complete documentation index, see [llms.txt](https://kinematicsoup.gitbook.io/scene-fusion/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/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfterraintranslator.md).

# Class sfTerrainTranslator

Namespace: [KS.SceneFusion.Client.Unity.Editor](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor.md)\
Assembly: KSUnity-Source.dll

Manages syncing of terrain data. The terrain data will be diveded into 64 by 64 regions and synced separately. When a region is modified, the whole region's terrain data will be compressed and sent to the server. The server will keep a copy of the of the data and send it to all other clients without decompressing it.

```csharp
public class sfTerrainTranslator : sfBaseTranslator
```

#### Inheritance

object ← [sfBaseTranslator](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md) ← [sfTerrainTranslator](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfterraintranslator.md)

#### Inherited Members

[sfBaseTranslator.Initialize()](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_initialize), [sfBaseTranslator.OnSessionConnect()](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_onsessionconnect), [sfBaseTranslator.OnSessionDisconnect()](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_onsessiondisconnect), [sfBaseTranslator.TryCreate(Object, out sfObject)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_trycreate_unityengine_object_ks_scenefusion_clie), [sfBaseTranslator.GetUObject(sfObject, Object)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_getuobject_ks_scenefusion_client_sfobject_unitye), [sfBaseTranslator.OnCreate(sfObject, int)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_oncreate_ks_scenefusion_client_sfobject_system_i), [sfBaseTranslator.OnConfirmCreate(sfObject)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_onconfirmcreate_ks_scenefusion_client_sfobject), [sfBaseTranslator.OnDelete(sfObject)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_ondelete_ks_scenefusion_client_sfobject), [sfBaseTranslator.OnConfirmDelete(sfObject, bool)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_onconfirmdelete_ks_scenefusion_client_sfobject_s), [sfBaseTranslator.OnConfirmSubscription(sfObject, bool)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_onconfirmsubscription_ks_scenefusion_client_sfob), [sfBaseTranslator.OnLock(sfObject)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_onlock_ks_scenefusion_client_sfobject), [sfBaseTranslator.OnUnlock(sfObject)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_onunlock_ks_scenefusion_client_sfobject), [sfBaseTranslator.OnLockOwnerChange(sfObject)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_onlockownerchange_ks_scenefusion_client_sfobject), [sfBaseTranslator.OnDirectLockChange(sfObject)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_ondirectlockchange_ks_scenefusion_client_sfobjec), [sfBaseTranslator.OnParentChange(sfObject, int)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_onparentchange_ks_scenefusion_client_sfobject_sy), [sfBaseTranslator.OnPropertyChange(sfBaseProperty)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_onpropertychange_ks_scenefusion_sfbaseproperty), [sfBaseTranslator.OnRemoveField(sfDictionaryProperty, string)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_onremovefield_ks_scenefusion_sfdictionarypropert), [sfBaseTranslator.OnListAdd(sfListProperty, int, int)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_onlistadd_ks_scenefusion_sflistproperty_system_i), [sfBaseTranslator.OnListRemove(sfListProperty, int, int)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_onlistremove_ks_scenefusion_sflistproperty_syste), [sfBaseTranslator.OnSPropertyChange(sfObject, SerializedProperty)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_onspropertychange_ks_scenefusion_client_sfobject), [sfBaseTranslator.OnSelect(sfObject, Object)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_onselect_ks_scenefusion_client_sfobject_unityeng), [sfBaseTranslator.OnDeselect(sfObject, Object)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md#ks_scenefusion_client_unity_editor_sfbasetranslator_ondeselect_ks_scenefusion_client_sfobject_unitye)

## Methods

### ApplyServerTerrainData(TerrainData, TerrainType, RectInt) <a href="#ks_scenefusion_client_unity_editor_sfterraintranslator_applyserverterraindata_unityengine_terraindat" id="ks_scenefusion_client_unity_editor_sfterraintranslator_applyserverterraindata_unityengine_terraindat"></a>

Applies server terrain data to the terrain.

```csharp
public void ApplyServerTerrainData(TerrainData terrainData, sfTerrainTranslator.TerrainType type, RectInt excludeBounds)
```

#### Parameters

`terrainData` TerrainData

terrainData to set

`type` [sfTerrainTranslator](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfterraintranslator.md).[TerrainType](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfterraintranslator/ks.scenefusion.client.unity.editor.sfterraintranslator.terraintype.md)

`excludeBounds` RectInt

exclude regions that overlap these bounds. If width or height is zero or less, all regions are updated.

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

Initialization

```csharp
public override void Initialize()
```

### OnConfirmCreate(sfObject) <a href="#ks_scenefusion_client_unity_editor_sfterraintranslator_onconfirmcreate_ks_scenefusion_client_sfobjec" id="ks_scenefusion_client_unity_editor_sfterraintranslator_onconfirmcreate_ks_scenefusion_client_sfobjec"></a>

Called when a locally created terrain object is confirmed as created. Refreshes the project browser to update the icon for the terrain asset.

```csharp
public override void OnConfirmCreate(sfObject obj)
```

#### Parameters

`obj` [sfObject](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfobject.md)

obj that whose creation was confirmed.

### OnCreate(sfObject, int) <a href="#ks_scenefusion_client_unity_editor_sfterraintranslator_oncreate_ks_scenefusion_client_sfobject_syste" id="ks_scenefusion_client_unity_editor_sfterraintranslator_oncreate_ks_scenefusion_client_sfobject_syste"></a>

Called when an object is created by another user.

```csharp
public override void OnCreate(sfObject obj, int childIndex)
```

#### Parameters

`obj` [sfObject](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfobject.md)

obj that was created.

`childIndex` int

childIndex of new object. -1 if object is a root.

### OnDelete(sfObject) <a href="#ks_scenefusion_client_unity_editor_sfterraintranslator_ondelete_ks_scenefusion_client_sfobject" id="ks_scenefusion_client_unity_editor_sfterraintranslator_ondelete_ks_scenefusion_client_sfobject"></a>

Called when an object is deleted by another user.

```csharp
public override void OnDelete(sfObject obj)
```

#### Parameters

`obj` [sfObject](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfobject.md)

obj that was deleted.

### OnDetailChange(TerrainData, RectInt, int) <a href="#ks_scenefusion_client_unity_editor_sfterraintranslator_ondetailchange_unityengine_terraindata_unitye" id="ks_scenefusion_client_unity_editor_sfterraintranslator_ondetailchange_unityengine_terraindata_unitye"></a>

Track a detail changes for a specific detail layer and area.

```csharp
public void OnDetailChange(TerrainData terrainData, RectInt changeArea, int layer)
```

#### Parameters

`terrainData` TerrainData

`changeArea` RectInt

`layer` int

### OnListAdd(sfListProperty, int, int) <a href="#ks_scenefusion_client_unity_editor_sfterraintranslator_onlistadd_ks_scenefusion_sflistproperty_syste" id="ks_scenefusion_client_unity_editor_sfterraintranslator_onlistadd_ks_scenefusion_sflistproperty_syste"></a>

Called when an a property is added to an object list property.

```csharp
public override void OnListAdd(sfListProperty listProperty, int index, int count)
```

#### Parameters

`listProperty` [sfListProperty](/scene-fusion/api-reference/ks.scenefusion/ks.scenefusion.sflistproperty.md)

`index` int

`count` int

### OnListRemove(sfListProperty, int, int) <a href="#ks_scenefusion_client_unity_editor_sfterraintranslator_onlistremove_ks_scenefusion_sflistproperty_sy" id="ks_scenefusion_client_unity_editor_sfterraintranslator_onlistremove_ks_scenefusion_sflistproperty_sy"></a>

Called when an a property is removed from an object list property.

```csharp
public override void OnListRemove(sfListProperty listProperty, int index, int count)
```

#### Parameters

`listProperty` [sfListProperty](/scene-fusion/api-reference/ks.scenefusion/ks.scenefusion.sflistproperty.md)

`index` int

`count` int

### OnPropertyChange(sfBaseProperty) <a href="#ks_scenefusion_client_unity_editor_sfterraintranslator_onpropertychange_ks_scenefusion_sfbasepropert" id="ks_scenefusion_client_unity_editor_sfterraintranslator_onpropertychange_ks_scenefusion_sfbasepropert"></a>

Called when an object property changes.

```csharp
public override void OnPropertyChange(sfBaseProperty property)
```

#### Parameters

`property` [sfBaseProperty](/scene-fusion/api-reference/ks.scenefusion/ks.scenefusion.sfbaseproperty.md)

property that changed.

### OnSessionConnect() <a href="#ks_scenefusion_client_unity_editor_sfterraintranslator_onsessionconnect" id="ks_scenefusion_client_unity_editor_sfterraintranslator_onsessionconnect"></a>

Called after connecting to a session.

```csharp
public override void OnSessionConnect()
```

### OnSessionDisconnect() <a href="#ks_scenefusion_client_unity_editor_sfterraintranslator_onsessiondisconnect" id="ks_scenefusion_client_unity_editor_sfterraintranslator_onsessiondisconnect"></a>

Called after disconnecting from a session.

```csharp
public override void OnSessionDisconnect()
```

### OnTerrainChange(TerrainData, TerrainType, RectInt, bool) <a href="#ks_scenefusion_client_unity_editor_sfterraintranslator_onterrainchange_unityengine_terraindata_ks_sc" id="ks_scenefusion_client_unity_editor_sfterraintranslator_onterrainchange_unityengine_terraindata_ks_sc"></a>

Called when the terrain changed.

```csharp
public void OnTerrainChange(TerrainData terrainData, sfTerrainTranslator.TerrainType type, RectInt changeArea, bool synced)
```

#### Parameters

`terrainData` TerrainData

terrainData that changed.

`type` [sfTerrainTranslator](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfterraintranslator.md).[TerrainType](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfterraintranslator/ks.scenefusion.client.unity.editor.sfterraintranslator.terraintype.md)

type of change

`changeArea` RectInt

the region that changed.

`synced` bool

indicates whether the changes were fully synchronized back to CPU memory.

### OnTreeChange(TerrainData, bool) <a href="#ks_scenefusion_client_unity_editor_sfterraintranslator_ontreechange_unityengine_terraindata_system_b" id="ks_scenefusion_client_unity_editor_sfterraintranslator_ontreechange_unityengine_terraindata_system_b"></a>

Called when tree data is changed.

```csharp
public void OnTreeChange(TerrainData terrainData, bool hasRemovals)
```

#### Parameters

`terrainData` TerrainData

`hasRemovals` bool

true if trees were removed.

### SendDetailChanges() <a href="#ks_scenefusion_client_unity_editor_sfterraintranslator_senddetailchanges" id="ks_scenefusion_client_unity_editor_sfterraintranslator_senddetailchanges"></a>

Send detail changes to the server.

```csharp
public void SendDetailChanges()
```

### SendTerrainChanges(TerrainType) <a href="#ks_scenefusion_client_unity_editor_sfterraintranslator_sendterrainchanges_ks_scenefusion_client_unit" id="ks_scenefusion_client_unity_editor_sfterraintranslator_sendterrainchanges_ks_scenefusion_client_unit"></a>

Sends terrain change of the given type to server.

```csharp
public void SendTerrainChanges(sfTerrainTranslator.TerrainType type)
```

#### Parameters

`type` [sfTerrainTranslator](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfterraintranslator.md).[TerrainType](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfterraintranslator/ks.scenefusion.client.unity.editor.sfterraintranslator.terraintype.md)

type of terrain data

### TryCreate(Object, out sfObject) <a href="#ks_scenefusion_client_unity_editor_sfterraintranslator_trycreate_unityengine_object_ks_scenefusion_c" id="ks_scenefusion_client_unity_editor_sfterraintranslator_trycreate_unityengine_object_ks_scenefusion_c"></a>

Creates an sfObject for a uobject if the object is a terrain data asset.

```csharp
public override bool TryCreate(Object uobj, out sfObject outObj)
```

#### Parameters

`uobj` Object

uobj to create sfObject for.

`outObj` [sfObject](/scene-fusion/api-reference/ks.scenefusion.client/ks.scenefusion.client.sfobject.md)

outObj created for the uobject.

#### Returns

bool

true if the uobject was handled by this translator.
