GetManagedReference(Object, long)
Retrieves an object based on its managed reference Id.
Read time 1 minuteLast updated 6 days ago
Definition
- Type: Method
- Namespace: UnityEngine.Serialization
- Assembly: UnityEngine.CoreModule
public static object GetManagedReference(Object obj, long id)
Parameters
Returns
Type | Description |
|---|---|
| Object | Returns the C# object referenced on the specified host and identified with provided Id. Returns null if no reference object is found. |
Remarks
Use this method to efficiently retrieve a specific referenced object when, for example, its exact location within an array or graph is unknown.
Additional Resources: ManagedReferenceUtility.GetManagedReferenceIdForObject, SerializeReference.
Examples
using System;using System.Collections.Generic;using UnityEditor;using UnityEngine;using UnityEngine.Serialization;public class GetManagedReferenceExample : ScriptableObject{ [Serializable] public class Item { public char m_data; } [SerializeReference] public List<Item> m_items = new List<Item>(); private void InsertNewItem(long id, char data) { var newItem = new Item() {m_data = data}; if (ManagedReferenceUtility.SetManagedReferenceIdForObject(this, newItem, id)) m_items.Add(newItem); } [MenuItem("Example/ManagedReferenceUtility GetManagedReference Example")] static void TestMethod() { var scriptableObject = ScriptableObject.CreateInstance<GetManagedReferenceExample>(); scriptableObject.InsertNewItem(1000, 'a'); scriptableObject.InsertNewItem(1001, 'b'); scriptableObject.InsertNewItem(1002, 'c'); scriptableObject.InsertNewItem(1003, 'd'); // Because 1002 is registered in an earlier call this will log an error and not change the state scriptableObject.InsertNewItem(1002, 'e'); // The array may get reordered over time. One way to find an specific item again would // be to look it up based on a known managed reference id var item = ManagedReferenceUtility.GetManagedReference(scriptableObject, 1002) as Item; Debug.LogFormat("Data on object 1002 is {0}", item.m_data); var willBeNull = ManagedReferenceUtility.GetManagedReference(scriptableObject, 9999) as Item; }}