版本:Unity 6 (6000.0)
语言English
  • C#

SerializedProperty.managedReferenceValue

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每个建议的更改,并在适用时进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

public object managedReferenceValue;

描述

分配给带有 SerializeReference 属性的字段的对象。

propertyTypeSerializedPropertyType.ManagedReference 时使用。



值对象必须是与托管引用字段的基本类型兼容的类型(即序列化属性引用的托管引用字段)。

其他资源:SerializeReferencepropertyTypeSerializedPropertyType.ManagedReference

using System;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using Object = UnityEngine.Object;

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

public int DoCalculation() { // Could be querying some external data, or other calculation that cannot be // made entirely based on the local object state m_data++; return m_data * 2; } }

[SerializeReference] public Item m_Item;

[MenuItem("Example/SerializedProperty ManagedReferenceValue Example1")] static void TestMethod1() { var scriptableObject = ScriptableObject.CreateInstance<SerializedPropertyManagedReferenceValueExample>(); var serializedObject = new SerializedObject(scriptableObject);

// Allocate and assign an object to the m_Item field via managedReferenceValue var referenceProperty = serializedObject.FindProperty("m_Item"); referenceProperty.managedReferenceValue = new Item();

// Change a value of the object's field referenceProperty.FindPropertyRelative("m_data").intValue = 99;

// Apply the change back to the "live" object serializedObject.ApplyModifiedProperties();

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

[MenuItem("Example/SerializedProperty ManagedReferenceValue Example2")] static void TestMethod2() { var scriptableObject = ScriptableObject.CreateInstance<SerializedPropertyManagedReferenceValueExample>(); scriptableObject.m_Item = new Item();

var serializedObject = new SerializedObject(scriptableObject); var referenceProperty = serializedObject.FindProperty("m_Item");

// The "live" referenced object can be accessed so we can call a method on it (referenceProperty.managedReferenceValue as Item).DoCalculation();

// The serialized state inside the SerializedObject is now out of data with the change // of m_data on the live object, but can be brought back in sync by calling Update() var serializedDataValue = serializedObject.FindProperty("m_Item.m_data").intValue; serializedObject.Update(); var updatedSerializedDataValue = serializedObject.FindProperty("m_Item.m_data").intValue;

// Will print: "Value of m_data before update: 1 and after update: 2" Debug.Log("Value of m_data before update: " + serializedDataValue + " and after update: " + updatedSerializedDataValue); } }