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

SerializedProperty.contentHash

Declaration

public uint contentHash;

Описание

Предоставляет хэш-значение для свойства. (только для чтения)

Вы можете использовать это для отслеживания изменений в значении пути свойства (Дополнительные ресурсы: SerializedProperty.propertyPath).

Обратите внимание, что:
-If размер содержимого свойства меньше или равен 32 битам, тогда содержимое будет возвращено вместо хэша.
-If путь свойства ведет к массиву или комплексному типу, хэш будет соответствовать всему содержимому.
-If свойство является полем с атрибутом [SerializeReference], или составным типом, содержащим такое поле, тогда хеширование содержимого не включает содержимое объекта ссылки, а вместо этого хеширует только идентификатор ссылки (Дополнительные ресурсы: SerializedProperty.managedReferenceId).

using UnityEngine;
using UnityEditor;

public class MyObject : ScriptableObject { public string myString = "answer to life the universe and everything"; public string[] myStringArray = { "answer", "to", "life", "the", "universe", "and", "everything" }; public int[] myIntArray = { 42, 442, 422, 4242 };

[MenuItem("Example/Output contentHash from SerializedProperty")] static void OutputContentHashFromSerializedProperty() { var scriptableObject = ScriptableObject.CreateInstance<MyObject>();

using (var serializedObject = new SerializedObject(scriptableObject)) { SerializedProperty serializedPropertyMyString = serializedObject.FindProperty("myString"); SerializedProperty serializedPropertyMyStringArray = serializedObject.FindProperty("myStringArray"); SerializedProperty serializedPropertyMyIntArray = serializedObject.FindProperty("myIntArray");

uint myStringHash = serializedPropertyMyString.contentHash; uint myStringArrayHash = serializedPropertyMyStringArray.contentHash; uint MyIntArrayHash = serializedPropertyMyIntArray.contentHash;

serializedPropertyMyString.stringValue = "new string"; serializedPropertyMyIntArray.DeleteArrayElementAtIndex(1);

serializedObject.ApplyModifiedPropertiesWithoutUndo();

Debug.Log(string.Format("myString: before={0}, after={1}, changed={2}", myStringHash, serializedPropertyMyString.contentHash, myStringHash == serializedPropertyMyString.contentHash ? "no" : "yes")); Debug.Log(string.Format("myStringArrayHash: before={0}, after={1}, changed={2}", myStringArrayHash, serializedPropertyMyStringArray.contentHash, myStringArrayHash == serializedPropertyMyStringArray.contentHash ? "no" : "yes")); Debug.Log(string.Format("MyIntArrayHash: before={0}, after={1}, changed={2}", MyIntArrayHash, serializedPropertyMyIntArray.contentHash, MyIntArrayHash == serializedPropertyMyIntArray.contentHash ? "no" : "yes")); } } }