# CanOpenAssetInEditor(int)

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

## Definition

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

```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.0/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(int instanceID)
    {
        if (AssetDatabase.GetMainAssetTypeAtPath(AssetDatabase.GetAssetPath(instanceID)) == 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(int instanceID)
    {
        if (AssetDatabase.GetMainAssetTypeAtPath(AssetDatabase.GetAssetPath(instanceID)) == 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.GetInstanceID());
    }
}
```
