Version: 2023.1

SerializedProperty.managedReferenceId

切换到手册
public long managedReferenceId ;

描述

Id associated with a managed reference.

Available when propertyType is SerializedPropertyType.ManagedReference. If the reference is null then the Id is SerializeUtility.RefIdNull.

See Also: SerializeReference, managedReferenceValue, ManagedReferenceUtility.GetManagedReferenceIdForObject.

using System;
using UnityEditor;
using UnityEngine;

public class SerializedPropertyManagedReferenceIdExample : ScriptableObject { [Serializable] public class Item { public int m_data = 1; }

[SerializeReference] public Item m_Item;

[SerializeReference] public Item m_Item2;

[MenuItem("Example/SerializedProperty ManagedReferenceId Example")] static void TestMethod1() { var scriptableObject = ScriptableObject.CreateInstance<SerializedPropertyManagedReferenceIdExample>(); scriptableObject.m_Item = new Item();

using (var serializedObject = new SerializedObject(scriptableObject)) { var itemProperty = serializedObject.FindProperty("m_Item"); var item2Property = serializedObject.FindProperty("m_Item2");

// Set m_Item2 to point to the same object as m_Item // Note: managedReferenceValue could also be used here, for the same result item2Property.managedReferenceId = itemProperty.managedReferenceId;

serializedObject.ApplyModifiedProperties(); }

// Check the results back on the live object

//Will print "Value of m_Item2.m_data: 1" Debug.Log("Value of m_Item2.m_data: " + scriptableObject.m_Item2.m_data);

// Prove that both fields point to the same object scriptableObject.m_Item.m_data = 2;

//Will print "Value of m_Item2.m_data: 2" Debug.Log("Value of m_Item2.m_data: " + scriptableObject.m_Item2.m_data); } }