# IsMainAsset

> Checks whether the asset is a main asset in the Project window.

## Definition

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

## IsMainAsset(Object)

Checks whether the asset is a main asset in the Project window.

```csharp
public static bool IsMainAsset(Object obj)
```

### Parameters

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

### Returns

| Type                                                          | Description                                         |
| ------------------------------------------------------------- | --------------------------------------------------- |
| [bool](https://learn.microsoft.com/dotnet/api/system.boolean) | True if the asset is a main asset, false otherwise. |

### Remarks

For example, an imported model has a GameObject as its root and several meshes and child GameObjects in an expanded state. The root GameObject is the main asset in this case.

### Examples

```csharp
using UnityEditor;
using UnityEngine;

public class Scriptable : ScriptableObject
{
}

public class AssetDatabaseExamples : MonoBehaviour
{
    [MenuItem("AssetDatabase/Is Main Asset Example")]
    static void IsMainAssetExample()
    {
        var materialAsset = new Material(Shader.Find("Standard"));

        //materialAsset is still in memory, therefore this will be False
        Debug.Log(AssetDatabase.IsMainAsset(materialAsset));

        //Create a Scriptable object
        var scriptableAssetPath = "Assets/ScriptableObjects/NewObject.asset";
        var mainAsset = ScriptableObject.CreateInstance<Scriptable>();
        AssetDatabase.CreateAsset(mainAsset, scriptableAssetPath);

        //Add the Material Asset to the Scriptable object, so that the Material becomes a Sub Asset of the Scriptable object
        AssetDatabase.AddObjectToAsset(materialAsset, scriptableAssetPath);
        AssetDatabase.SaveAssets();

        //This will be false because material asset has been added to the main Asset and is now a Sub Asset
        Debug.Log(AssetDatabase.IsMainAsset(materialAsset));

        //Remove the subAsset from the Scriptable object and create it as an Asset
        AssetDatabase.RemoveObjectFromAsset(materialAsset);
        AssetDatabase.CreateAsset(materialAsset, "Assets/Materials/New Mat0.mat");

        //This will be True because the material is now the main Asset
        Debug.Log(AssetDatabase.IsMainAsset(materialAsset));
    }
}
```

## IsMainAsset(EntityId)

Checks whether the asset is a main asset in the Project window.

```csharp
public static bool IsMainAsset(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) | True if the asset is a main asset, false otherwise. |

### Remarks

For example, an imported model has a GameObject as its root and several meshes and child GameObjects in an expanded state. The root GameObject is the main asset in this case.

### Examples

```csharp
using UnityEditor;
using UnityEngine;

public class Scriptable : ScriptableObject
{
}

public class AssetDatabaseExamples : MonoBehaviour
{
    [MenuItem("AssetDatabase/Is Main Asset Example")]
    static void IsMainAssetExample()
    {
        var materialAsset = new Material(Shader.Find("Standard"));

        //materialAsset is still in memory, therefore this will be False
        Debug.Log(AssetDatabase.IsMainAsset(materialAsset));

        //Create a Scriptable object
        var scriptableAssetPath = "Assets/ScriptableObjects/NewObject.asset";
        var mainAsset = ScriptableObject.CreateInstance<Scriptable>();
        AssetDatabase.CreateAsset(mainAsset, scriptableAssetPath);

        //Add the Material Asset to the Scriptable object, so that the Material becomes a Sub Asset of the Scriptable object
        AssetDatabase.AddObjectToAsset(materialAsset, scriptableAssetPath);
        AssetDatabase.SaveAssets();

        //This will be false because material asset has been added to the main Asset and is now a Sub Asset
        Debug.Log(AssetDatabase.IsMainAsset(materialAsset));

        //Remove the subAsset from the Scriptable object and create it as an Asset
        AssetDatabase.RemoveObjectFromAsset(materialAsset);
        AssetDatabase.CreateAsset(materialAsset, "Assets/Materials/New Mat0.mat");

        //This will be True because the material is now the main Asset
        Debug.Log(AssetDatabase.IsMainAsset(materialAsset));
    }
}
```

## IsMainAsset(int)

Checks whether the asset is a main asset in the Project window.

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

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

### Parameters

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

### Returns

| Type                                                          | Description                                         |
| ------------------------------------------------------------- | --------------------------------------------------- |
| [bool](https://learn.microsoft.com/dotnet/api/system.boolean) | True if the asset is a main asset, false otherwise. |

### Remarks

For example, an imported model has a GameObject as its root and several meshes and child GameObjects in an expanded state. The root GameObject is the main asset in this case.

### Examples

```csharp
using UnityEditor;
using UnityEngine;

public class Scriptable : ScriptableObject
{
}

public class AssetDatabaseExamples : MonoBehaviour
{
    [MenuItem("AssetDatabase/Is Main Asset Example")]
    static void IsMainAssetExample()
    {
        var materialAsset = new Material(Shader.Find("Standard"));

        //materialAsset is still in memory, therefore this will be False
        Debug.Log(AssetDatabase.IsMainAsset(materialAsset));

        //Create a Scriptable object
        var scriptableAssetPath = "Assets/ScriptableObjects/NewObject.asset";
        var mainAsset = ScriptableObject.CreateInstance<Scriptable>();
        AssetDatabase.CreateAsset(mainAsset, scriptableAssetPath);

        //Add the Material Asset to the Scriptable object, so that the Material becomes a Sub Asset of the Scriptable object
        AssetDatabase.AddObjectToAsset(materialAsset, scriptableAssetPath);
        AssetDatabase.SaveAssets();

        //This will be false because material asset has been added to the main Asset and is now a Sub Asset
        Debug.Log(AssetDatabase.IsMainAsset(materialAsset));

        //Remove the subAsset from the Scriptable object and create it as an Asset
        AssetDatabase.RemoveObjectFromAsset(materialAsset);
        AssetDatabase.CreateAsset(materialAsset, "Assets/Materials/New Mat0.mat");

        //This will be True because the material is now the main Asset
        Debug.Log(AssetDatabase.IsMainAsset(materialAsset));
    }
}
```
