# IsSubAsset

> Checks whether an asset object is part of another asset.

## Definition

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

## IsSubAsset(Object)

Checks whether an asset object is part of another asset.

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

### Parameters

**** (\[Object]\(/engine/7000.0/script-reference/unityengine/object)): The asset object to check.

### Returns

| Type                                                          | Description                                                   |
| ------------------------------------------------------------- | ------------------------------------------------------------- |
| [bool](https://learn.microsoft.com/dotnet/api/system.boolean) | True if the asset is part of another asset. Otherwise, false. |

### Remarks

Some assets are stored inside another asset. For example, a procedural material can be part of a material package. Use this method to find out whether an asset is stored this way.

### Examples

```csharp
using UnityEditor;
using UnityEngine;
public class Scriptable : ScriptableObject
{
}

public class AssetDatabaseExamples : MonoBehaviour
{
    [MenuItem("AssetDatabase/Is Sub Asset Example")]
    static void IsSubAssetExample()
    {
        var materialAsset = new Material(Shader.Find("Standard"));
        //materialAsset is still in memory, therefore this will be False
        Debug.Log(AssetDatabase.IsSubAsset(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 True because the Material asset has been added to the mainAsset and is now a Sub Asset
        Debug.Log(AssetDatabase.IsSubAsset(materialAsset));
    }
}
```

## IsSubAsset(EntityId)

Checks whether the asset with the specified EntityId is part of another asset.

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

### Parameters

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

### Returns

| Type                                                          | Description                                                   |
| ------------------------------------------------------------- | ------------------------------------------------------------- |
| [bool](https://learn.microsoft.com/dotnet/api/system.boolean) | True if the asset is part of another asset. Otherwise, false. |

### Remarks

Some assets are stored inside another asset. For example, a procedural material can be part of a material package. Use this method to find out whether an asset is stored this way.

## IsSubAsset(int)

Checks whether the asset with the specified instance ID is part of another asset.

> **Warning:**
>
> **Removed.** Please use IsSubAsset(EntityId) with the EntityId type instead.

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

### Parameters

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

### Returns

| Type                                                          | Description                                                   |
| ------------------------------------------------------------- | ------------------------------------------------------------- |
| [bool](https://learn.microsoft.com/dotnet/api/system.boolean) | True if the asset is part of another asset. Otherwise, false. |

### Remarks

This overload is obsolete. Use the overload that takes an [EntityId](/engine/7000.0/script-reference/unityengine/entityid.md) instead.
