# CanOpenAssetInEditor

> Checks if Unity can open an asset in the Editor.

## Definition

* **Type:** Method
* **Namespace:** [UnityEditor](/engine/6000.3/script-reference/unityeditor.md)
* **Assembly:** UnityEditor

## CanOpenAssetInEditor(EntityId)

Checks if Unity can open an asset in the Editor.

```csharp
public static bool CanOpenAssetInEditor(EntityId entityId)
```

### Parameters

**** (\[EntityId]\(/engine/6000.3/script-reference/unityengine/entityid)): The EntityId of the asset.

### Returns

| Type                                                          | Description                                                                                   |
| ------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| [bool](https://learn.microsoft.com/dotnet/api/system.boolean) | Returns true if Unity can successfully open the asset in the Editor, otherwise returns false. |

### Remarks

Checks if Unity can open a given asset instance in the Editor if [AssetDatabase.OpenAsset](/engine/6000.3/script-reference/unityeditor/assetdatabase/openasset.md) is executed. Note: The asset must be written to disk, or this function always returns false.

### Examples

```csharp
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEngine;

[CreateAssetMenu(fileName = "MyObject", menuName = "ScriptableObjects/MyObject", order = 1)]
public class MyObject : ScriptableObject
{
    public string myData;

    [OnOpenAsset]
    public static bool Open(EntityId entityId)
    {
        if (AssetDatabase.GetMainAssetTypeAtPath(AssetDatabase.GetAssetPath(entityId)) == typeof(MyObject))
        {
            Debug.Log("Opening asset");
            return true;
        }
        else  return false; // This method doesn't handle opening of different asset types
    }

    [OnOpenAsset(OnOpenAssetAttributeMode.Validate)]
    public static bool WillOpen(EntityId entityId)
    {
        if (AssetDatabase.GetMainAssetTypeAtPath(AssetDatabase.GetAssetPath(entityId)) == typeof(MyObject))
        {
            // We can open MyObject asset using MyObject opening method
            Debug.Log("This asset can be opened by OnOpenAsset marked method");
            return true;
        }
        else  return false; // The passed instance doesn't belong to MyObject type asset so we won't be able to open it using opening method inside MyObject
    }

    [MenuItem("Test/WillOpenInUnity")]
    public static void WillSelectionBeOpenedInUnity()
    {
        AssetDatabase.CanOpenAssetInEditor(Selection.activeObject.GetEntityId());
    }
}
```

## CanOpenAssetInEditor(int)

Checks if Unity can open an asset in the Editor.

> **Warning:**
>
> **Deprecated.** Please use CanOpenAssetInEditor(EntityId) with the EntityId parameter type instead.

```csharp
public static bool CanOpenAssetInEditor(int instanceID)
```

### Parameters

**** (\[int]\(https\://learn.microsoft.com/dotnet/api/system.int32)): The instance ID of the asset.

### Returns

| Type                                                          | Description                                                                                   |
| ------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| [bool](https://learn.microsoft.com/dotnet/api/system.boolean) | Returns true if Unity can successfully open the asset in the Editor, otherwise returns false. |

### Remarks

Checks if Unity can open a given asset instance in the Editor if [AssetDatabase.OpenAsset](/engine/6000.3/script-reference/unityeditor/assetdatabase/openasset.md) is executed. Note: The asset must be written to disk, or this function always returns false.

### Examples

```csharp
using UnityEditor;
using UnityEditor.Callbacks;
using UnityEngine;

[CreateAssetMenu(fileName = "MyObject", menuName = "ScriptableObjects/MyObject", order = 1)]
public class MyObject : ScriptableObject
{
    public string myData;

    [OnOpenAsset]
    public static bool Open(EntityId entityId)
    {
        if (AssetDatabase.GetMainAssetTypeAtPath(AssetDatabase.GetAssetPath(entityId)) == typeof(MyObject))
        {
            Debug.Log("Opening asset");
            return true;
        }
        else  return false; // This method doesn't handle opening of different asset types
    }

    [OnOpenAsset(OnOpenAssetAttributeMode.Validate)]
    public static bool WillOpen(EntityId entityId)
    {
        if (AssetDatabase.GetMainAssetTypeAtPath(AssetDatabase.GetAssetPath(entityId)) == typeof(MyObject))
        {
            // We can open MyObject asset using MyObject opening method
            Debug.Log("This asset can be opened by OnOpenAsset marked method");
            return true;
        }
        else  return false; // The passed instance doesn't belong to MyObject type asset so we won't be able to open it using opening method inside MyObject
    }

    [MenuItem("Test/WillOpenInUnity")]
    public static void WillSelectionBeOpenedInUnity()
    {
        AssetDatabase.CanOpenAssetInEditor(Selection.activeObject.GetEntityId());
    }
}
```
