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

# Class sfAssetTranslator

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

```csharp
public class sfAssetTranslator : sfBaseUObjectTranslator
```

#### Inheritance

object ← [sfBaseTranslator](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbasetranslator.md) ← [sfBaseUObjectTranslator](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbaseuobjecttranslator.md) ← [sfAssetTranslator](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfassettranslator.md)

#### Inherited Members

[sfBaseUObjectTranslator.m\_propertyChangeHandlers](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbaseuobjecttranslator.md#ks_scenefusion_client_unity_editor_sfbaseuobjecttranslator_m_propertychangehandlers), [sfBaseUObjectTranslator.PostPropertyChange](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbaseuobjecttranslator.md#ks_scenefusion_client_unity_editor_sfbaseuobjecttranslator_postpropertychange), [sfBaseUObjectTranslator.PostUObjectChange](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbaseuobjecttranslator.md#ks_scenefusion_client_unity_editor_sfbaseuobjecttranslator_postuobjectchange), [sfBaseUObjectTranslator.OnPropertyChange(sfBaseProperty)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbaseuobjecttranslator.md#ks_scenefusion_client_unity_editor_sfbaseuobjecttranslator_onpropertychange_ks_scenefusion_sfbasepro), [sfBaseUObjectTranslator.OnRemoveField(sfDictionaryProperty, string)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbaseuobjecttranslator.md#ks_scenefusion_client_unity_editor_sfbaseuobjecttranslator_onremovefield_ks_scenefusion_sfdictionary), [sfBaseUObjectTranslator.OnListAdd(sfListProperty, int, int)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbaseuobjecttranslator.md#ks_scenefusion_client_unity_editor_sfbaseuobjecttranslator_onlistadd_ks_scenefusion_sflistproperty_s), [sfBaseUObjectTranslator.OnListRemove(sfListProperty, int, int)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbaseuobjecttranslator.md#ks_scenefusion_client_unity_editor_sfbaseuobjecttranslator_onlistremove_ks_scenefusion_sflistpropert), [sfBaseUObjectTranslator.CreateObject(Object, string)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbaseuobjecttranslator.md#ks_scenefusion_client_unity_editor_sfbaseuobjecttranslator_createobject_unityengine_object_system_st), [sfBaseUObjectTranslator.CallPropertyChangeHandlers(Object, sfBaseProperty, string)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbaseuobjecttranslator.md#ks_scenefusion_client_unity_editor_sfbaseuobjecttranslator_callpropertychangehandlers_unityengine_ob), [sfBaseUObjectTranslator.CallPostPropertyChangeHandlers(Object, sfBaseProperty, string)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbaseuobjecttranslator.md#ks_scenefusion_client_unity_editor_sfbaseuobjecttranslator_callpostpropertychangehandlers_unityengin), [sfBaseUObjectTranslator.CallPostUObjectChangeHandlers(Object)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbaseuobjecttranslator.md#ks_scenefusion_client_unity_editor_sfbaseuobjecttranslator_callpostuobjectchangehandlers_unityengine), [sfBaseUObjectTranslator.OnSelect(sfObject, Object)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbaseuobjecttranslator.md#ks_scenefusion_client_unity_editor_sfbaseuobjecttranslator_onselect_ks_scenefusion_client_sfobject_u), [sfBaseUObjectTranslator.OnDeselect(sfObject, Object)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbaseuobjecttranslator.md#ks_scenefusion_client_unity_editor_sfbaseuobjecttranslator_ondeselect_ks_scenefusion_client_sfobject), [sfBaseUObjectTranslator.OnReplace(sfObject, Object, Object)](/scene-fusion/api-reference/ks.scenefusion.client.unity.editor/ks.scenefusion.client.unity.editor.sfbaseuobjecttranslator.md#ks_scenefusion_client_unity_editor_sfbaseuobjecttranslator_onreplace_ks_scenefusion_client_sfobject), [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

### Create(Object) <a href="#ks_scenefusion_client_unity_editor_sfassettranslator_create_unityengine_object" id="ks_scenefusion_client_unity_editor_sfassettranslator_create_unityengine_object"></a>

Creates an sfObject for an asset.

```csharp
public sfObject Create(Object asset)
```

#### Parameters

`asset` Object

asset to create sfObject for.

#### Returns

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

object for the asset, or null if one could not be created.

### GetUObject(sfObject, Object) <a href="#ks_scenefusion_client_unity_editor_sfassettranslator_getuobject_ks_scenefusion_client_sfobject_unity" id="ks_scenefusion_client_unity_editor_sfassettranslator_getuobject_ks_scenefusion_client_sfobject_unity"></a>

Gets the UObject for an sfObject. Tries to get the UObject from the sfObjectMap, then if the sfObject has a path property, tries to load it by asset path. Otherwise if current is a pathless asset whose class matches the class property and isn't already mapped to an sfObject, maps current to the sfObject and returns it, otherwise adds the sfObject to the create set to have an asset created for it in the next update if one isn't mapped to it before then.

```csharp
public override Object GetUObject(sfObject obj, Object current = null)
```

#### Parameters

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

obj to get UObject for.

`current` Object

current value of the serialized property we are getting the UObject reference for.

#### Returns

Object

for the sfObject.

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

Initialization

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

### IsSyncable(Object) <a href="#ks_scenefusion_client_unity_editor_sfassettranslator_issyncable_unityengine_object" id="ks_scenefusion_client_unity_editor_sfassettranslator_issyncable_unityengine_object"></a>

Checks if a uobject can be synced. An object can be synced if:

* It is not null.
* It is not a built-in asset.
* It is not a stand-in.
* It is a syncable type (registered with sfLoader.Get().RegisterSyncableType) or it is a scriptable object without a path.

```csharp
public bool IsSyncable(Object uobj)
```

#### Parameters

`uobj` Object

#### Returns

bool

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

Called when a locally created asset object is confirmed as created. Refreshes the project browser to update the icon for the 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.

### OnConfirmDelete(sfObject, bool) <a href="#ks_scenefusion_client_unity_editor_sfassettranslator_onconfirmdelete_ks_scenefusion_client_sfobject" id="ks_scenefusion_client_unity_editor_sfassettranslator_onconfirmdelete_ks_scenefusion_client_sfobject"></a>

Called when a locally deleted asset is confirmed as deleted. Calls OnDelete to remove the object from the sfObject map, or reupload it if it is still referenced. Assets with paths are never deleted.

```csharp
public override void OnConfirmDelete(sfObject obj, bool unsubscribed)
```

#### Parameters

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

`unsubscribed` bool

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

Called when an object is created by another user. Loads the asset by path if it has a path. Otherwise, attempts to find a pathless asset uobject to map to it from the references to the serialized properties. If one cannot be found add the sfObject to the create set to have an asset created for it on the next update. Applies the sfObject's properties to the asset.

```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_sfassettranslator_ondelete_ks_scenefusion_client_sfobject" id="ks_scenefusion_client_unity_editor_sfassettranslator_ondelete_ks_scenefusion_client_sfobject"></a>

Called when an asset object is deleted. Pathless assets are deleted when they are no longer referenced. Removes the object from the object map if there are no references to it, otherwise reuploads it, which can happen if one user creates a reference to a pathless asset at the same time as another user deletes all references to that asset. Assets with paths are never deleted.

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

#### Parameters

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

### OnLock(sfObject) <a href="#ks_scenefusion_client_unity_editor_sfassettranslator_onlock_ks_scenefusion_client_sfobject" id="ks_scenefusion_client_unity_editor_sfassettranslator_onlock_ks_scenefusion_client_sfobject"></a>

Called when an object is locked by another user.

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

#### Parameters

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

obj that was locked.

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

Called after connecting to a sesson. Registers event handlers.

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

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

Called after disconnecting from a session. Unregisters event handlers, unlocks assets and clears data structures.

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

### OnUnlock(sfObject) <a href="#ks_scenefusion_client_unity_editor_sfassettranslator_onunlock_ks_scenefusion_client_sfobject" id="ks_scenefusion_client_unity_editor_sfassettranslator_onunlock_ks_scenefusion_client_sfobject"></a>

Called when an object is unlocked by another user.

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

#### Parameters

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

obj that was unlocked.

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

Creates an sfObject for a uobject if the object is a syncable asset type.

```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.
