| Parameter | Description |
|---|---|
| existingObjects | A list of existing objects whose names define the set of already-taken names. |
| name | Desired name to use as-is, or as a base for a unique name. |
string
A name not used by any object in existingObjects.
Returns a unique name using the provided name as a base, derived from the names of a list of existing objects.
If the provided name matches the name of any object in existingObjects, a unique name is generated by appending the next available numerical increment.
Use this method instead of ObjectNames.GetUniqueName when you already hold a List<Object> of existing objects. It avoids allocating a temporary string array, making it suitable for allocation-sensitive contexts such as large-hierarchy operations and frequently called Editor tools.
Additional resources: ObjectNames.GetUniqueName, GameObjectUtility.GetUniqueNameForSibling, GameObjectUtility.EnsureUniqueNameForSibling.
using System.Collections.Generic; using UnityEngine; using UnityEditor;
public class ExampleClass { public void Example() { // Build a list of objects without extracting their names into a string array. var existingObjects = new List<Object> { new GameObject("Object"), new GameObject("Thing"), new GameObject("Thing (1)") };
// Displays "Object (1)" Debug.Log(ObjectNames.GetUniqueObjectName(existingObjects, "Object"));
// Displays "Thing (2)" Debug.Log(ObjectNames.GetUniqueObjectName(existingObjects, "Thing"));
// Displays "Other" Debug.Log(ObjectNames.GetUniqueObjectName(existingObjects, "Other"));
foreach (Object obj in existingObjects) Object.DestroyImmediate(obj); } }