static bool ShouldInitialize(FieldInfo field, object value) { if (value == null) return true; else if (field.IsDefined(typeof(InitializeValueAttribute), true) || field.IsDefined(typeof(InitializeContentAttribute), true)) return true; else if (field.IsDefined(typeof(DoNotInitializeAttribute), true) || field.DeclaringType.IsDefined(typeof(DoNotInitializeAttribute), true)) return false; else if (field.IsInitOnly || field.IsBackingField()) return false; else if ((value is UnityEngine.Object) && (field.IsPublic || field.IsDefined(typeof(SerializeField), true)) && field.DeclaringType.IsDefined(typeof(SerializableAttribute), true)) return false; else return true; }