Unity 6.3
0 онлайн 77 гостей 3 в системе
Вход

ManagedReferenceUtility.GetManagedReference

Declaration

public static object GetManagedReference(Object obj, long id);

Параметры

Параметр Описание
hostObj Хост-объект, поддерживающий SerializeReference. Например, MonoBehaviour или ScriptableObject.
refId Идентификатор управляемой ссылки.

Возвращаемое значение

объект Возвращает C# объект, на который сделана ссылка на указанном узле и который идентифицирован указанным Id. Возвращает null, если не найден объект ссылки.

Описание

Получает объект на основе его управляемого идентификатора ссылки.

Используйте этот метод для эффективного получения конкретного объекта ссылки, когда, например, его точное местоположение в массиве или графе неизвестно.

Дополнительные ресурсы: GetManagedReferenceIdForObject, SerializeReference.

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; } }