# VersionControlObject

> The abstract base class for representing a version control system.

## Definition

* **Type:** Class
* **Namespace:** [UnityEditor.VersionControl](/engine/6000.6/script-reference/unityeditor/versioncontrol.md)
* **Assembly:** UnityEditor.CoreModule
* **Inherits from:** [ScriptableObject](/engine/6000.6/script-reference/unityengine/scriptableobject.md)

```csharp
public abstract class VersionControlObject : ScriptableObject
```

## Remarks

You can add support for a custom VCS by creating a new class derived from VersionControlObject and applying the [VersionControlAttribute](/engine/6000.6/script-reference/unityeditor/versioncontrol/versioncontrolattribute.md).

```csharp
using UnityEditor.VersionControl;
using UnityEngine;

[VersionControl("Custom")]
public class CustomVersionControlObject : VersionControlObject
{
    public override void OnActivate()
    {
        Debug.Log("Custom VCS activated.");
    }

    public override void OnDeactivate()
    {
        Debug.Log("Custom VCS deactivated.");
    }
}
```

Using the example above, a new VCS option called *Custom* will show up in Version Control settings window. You should only perform VCS operations when a VersionControlObject is activated. [VersionControlObject.OnActivate](/engine/6000.6/script-reference/unityeditor/versioncontrol/versioncontrolobject/onactivate.md) and [VersionControlObject.OnDeactivate](/engine/6000.6/script-reference/unityeditor/versioncontrol/versioncontrolobject/ondeactivate.md) methods are called on your class to notify your code about the change.

Any persistent settings that must survive between Unity sessions (for example, the username or password) must be handled either by the underlying VCS, by using [EditorUserSettings](/engine/6000.6/script-reference/unityeditor/editorusersettings.md), or stored in a file. This is because the VersionControlObject is not serialized to disk and a new instance is created every time Unity starts up or when the VCS is activated.

The VersionControlObject is derived from [ScriptableObject](/engine/6000.6/script-reference/unityengine/scriptableobject.md). This makes [domain reloading](/engine/6000.6/manual/scripting/compilation-and-code-reload/code-reloading-editor/domain-reloading.md) handling simpler. You can add [ScriptableObject.OnEnable()](/engine/6000.6/script-reference/unityengine/scriptableobject/onenable.md) method to restore the state if needed.

You can use [AssetModificationProcessor](/engine/6000.6/script-reference/unityeditor/assetmodificationprocessor.md) and [AssetPostprocessor.OnPostprocessAllAssets(string\[\], string\[\], string\[\], string\[\], bool)](/engine/6000.6/script-reference/unityeditor/assetpostprocessor/onpostprocessallassets.md) to get notifications from Unity when it wants to edit, add or remove assets.

Additional Resources: [VersionControlAttribute](/engine/6000.6/script-reference/unityeditor/versioncontrol/versioncontrolattribute.md), [VersionControlManager](/engine/6000.6/script-reference/unityeditor/versioncontrol/versioncontrolmanager.md), [EditorUserSettings](/engine/6000.6/script-reference/unityeditor/editorusersettings.md), [ScriptableObject](/engine/6000.6/script-reference/unityengine/scriptableobject.md), [AssetModificationProcessor](/engine/6000.6/script-reference/unityeditor/assetmodificationprocessor.md), [AssetPostprocessor](/engine/6000.6/script-reference/unityeditor/assetpostprocessor.md).

## Properties

| Property                                                                                                      | Description                                                                                                                                                                        |
| ------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [isConnected](/engine/6000.6/script-reference/unityeditor/versioncontrol/versioncontrolobject/isconnected.md) | Tests whether the [VersionControlObject](/engine/6000.6/script-reference/unityeditor/versioncontrol/versioncontrolobject.md) is connected to an underlying version control system. |

## Methods

| Method                                                                                                          | Description                                                                                                     |
| --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| [GetExtension](/engine/6000.6/script-reference/unityeditor/versioncontrol/versioncontrolobject/getextension.md) | Gets optional extension object.                                                                                 |
| [OnActivate](/engine/6000.6/script-reference/unityeditor/versioncontrol/versioncontrolobject/onactivate.md)     | Called when your version control system is activated.                                                           |
| [OnDeactivate](/engine/6000.6/script-reference/unityeditor/versioncontrol/versioncontrolobject/ondeactivate.md) | Called when your version control system is deactivated.                                                         |
| [Refresh](/engine/6000.6/script-reference/unityeditor/versioncontrol/versioncontrolobject/refresh.md)           | Called when the cached state should be discarded and the new state should be retrieved from the underlying VCS. |

## Inheritance

**Inherited Members:**

* [ScriptableObject.CreateInstance(string)](/engine/6000.6/script-reference/unityengine/scriptableobject/createinstance.md#createinstance\(string\))
* [ScriptableObject.CreateInstance(Type)](/engine/6000.6/script-reference/unityengine/scriptableobject/createinstance.md#createinstance\(type\))
* [ScriptableObject.CreateInstance\<T>()](/engine/6000.6/script-reference/unityengine/scriptableobject/createinstance.md)
* [Object.GetEntityId()](/engine/6000.6/script-reference/unityengine/object/getentityid.md)
* [Object.GetHashCode()](/engine/6000.6/script-reference/unityengine/object/gethashcode.md)
* [Object.InstantiateAsync\<T>(T)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, Transform)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, Vector3, Quaternion)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, Transform, Vector3, Quaternion)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, Transform)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, Vector3, Quaternion)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, ReadOnlySpan\<Vector3>, ReadOnlySpan\<Quaternion>)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, Transform, Vector3, Quaternion)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, Transform, Vector3, Quaternion, CancellationToken)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, Transform, ReadOnlySpan\<Vector3>, ReadOnlySpan\<Quaternion>)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, Transform, ReadOnlySpan\<Vector3>, ReadOnlySpan\<Quaternion>, CancellationToken)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, InstantiateParameters, CancellationToken)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, InstantiateParameters, CancellationToken)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, Vector3, Quaternion, InstantiateParameters, CancellationToken)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, Vector3, Quaternion, InstantiateParameters, CancellationToken)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.InstantiateAsync\<T>(T, int, ReadOnlySpan\<Vector3>, ReadOnlySpan\<Quaternion>, InstantiateParameters, CancellationToken)](/engine/6000.6/script-reference/unityengine/object/instantiateasync.md)
* [Object.Instantiate(Object, Vector3, Quaternion)](/engine/6000.6/script-reference/unityengine/object/instantiate.md#instantiate\(object-vector3-quaternion\))
* [Object.Instantiate(Object, Vector3, Quaternion, Transform)](/engine/6000.6/script-reference/unityengine/object/instantiate.md#instantiate\(object-vector3-quaternion-transform\))
* [Object.Instantiate(Object)](/engine/6000.6/script-reference/unityengine/object/instantiate.md#instantiate\(object\))
* [Object.Instantiate(Object, Scene)](/engine/6000.6/script-reference/unityengine/object/instantiate.md#instantiate\(object-scene\))
* [Object.Instantiate\<T>(T, InstantiateParameters)](/engine/6000.6/script-reference/unityengine/object/instantiate.md)
* [Object.Instantiate\<T>(T, Vector3, Quaternion, InstantiateParameters)](/engine/6000.6/script-reference/unityengine/object/instantiate.md)
* [Object.Instantiate(Object, Transform)](/engine/6000.6/script-reference/unityengine/object/instantiate.md#instantiate\(object-transform\))
* [Object.Instantiate(Object, Transform, bool)](/engine/6000.6/script-reference/unityengine/object/instantiate.md#instantiate\(object-transform-bool\))
* [Object.Instantiate\<T>(T)](/engine/6000.6/script-reference/unityengine/object/instantiate.md)
* [Object.Instantiate\<T>(T, Vector3, Quaternion)](/engine/6000.6/script-reference/unityengine/object/instantiate.md)
* [Object.Instantiate\<T>(T, Vector3, Quaternion, Transform)](/engine/6000.6/script-reference/unityengine/object/instantiate.md)
* [Object.Instantiate\<T>(T, Transform)](/engine/6000.6/script-reference/unityengine/object/instantiate.md)
* [Object.Instantiate\<T>(T, Transform, bool)](/engine/6000.6/script-reference/unityengine/object/instantiate.md)
* [Object.Destroy(Object, float)](/engine/6000.6/script-reference/unityengine/object/destroy.md)
* [Object.DestroyImmediate(Object, bool)](/engine/6000.6/script-reference/unityengine/object/destroyimmediate.md)
* [Object.FindObjectsByType(Type)](/engine/6000.6/script-reference/unityengine/object/findobjectsbytype.md#findobjectsbytype\(type\))
* [Object.FindObjectsByType(Type, FindObjectsInactive)](/engine/6000.6/script-reference/unityengine/object/findobjectsbytype.md#findobjectsbytype\(type-findobjectsinactive\))
* [Object.DontDestroyOnLoad(Object)](/engine/6000.6/script-reference/unityengine/object/dontdestroyonload.md)
* [Object.FindAnyObjectByType\<T>()](/engine/6000.6/script-reference/unityengine/object/findanyobjectbytype.md#findanyobjectbytypet\(\))
* [Object.FindAnyObjectByType\<T>(FindObjectsInactive)](/engine/6000.6/script-reference/unityengine/object/findanyobjectbytype.md#findanyobjectbytypet\(findobjectsinactive\))
* [Object.FindObjectsByType\<T>()](/engine/6000.6/script-reference/unityengine/object/findobjectsbytype.md#findobjectsbytypet\(\))
* [Object.FindObjectsByType\<T>(FindObjectsInactive)](/engine/6000.6/script-reference/unityengine/object/findobjectsbytype.md#findobjectsbytypet\(findobjectsinactive\))
* [Object.FindAnyObjectByType(Type)](/engine/6000.6/script-reference/unityengine/object/findanyobjectbytype.md#findanyobjectbytype\(type\))
* [Object.FindAnyObjectByType(Type, FindObjectsInactive)](/engine/6000.6/script-reference/unityengine/object/findanyobjectbytype.md#findanyobjectbytype\(type-findobjectsinactive\))
* [Object.ToString()](/engine/6000.6/script-reference/unityengine/object/tostring.md)
* [Object.name](/engine/6000.6/script-reference/unityengine/object/name.md)
* [Object.hideFlags](/engine/6000.6/script-reference/unityengine/object/hideflags.md)

### Operators

| Operator                                                                           | Description                                                             |
| ---------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| [operator ==](/engine/6000.6/script-reference/unityengine/object/op-equality.md)   | Compares two object references to see if they refer to the same object. |
| [bool](/engine/6000.6/script-reference/unityengine/object/op-implicit.md)          | Determines whether the object exists.                                   |
| [operator !=](/engine/6000.6/script-reference/unityengine/object/op-inequality.md) | Compares if two objects refer to a different object.                    |
