예제 #1
0
        private static ValueGetter <TOwner, TValue> GetCachedGetter(MemberInfo member)
        {
            Delegate del;

            if (GetterSetterCaches <TOwner> .Getters.TryGetInnerValue(member, typeof(TValue), out del))
            {
                return((ValueGetter <TOwner, TValue>)del);
            }
            else
            {
                ValueGetter <TOwner, TValue> result;

                var fieldInfo    = member as FieldInfo;
                var propertyInfo = member as PropertyInfo;

                if (fieldInfo != null)
                {
                    result = EmitUtilities.CreateInstanceFieldGetter <TOwner, TValue>(fieldInfo);
                }
                else if (propertyInfo != null)
                {
                    result = EmitUtilities.CreateInstancePropertyGetter <TOwner, TValue>(propertyInfo);
                }
                else
                {
                    throw new ArgumentException("Cannot create a GetterSetter for a member of type + " + member.GetType().Name + "!");
                }

                GetterSetterCaches <TOwner> .Getters.AddInner(member, typeof(TValue), result);

                return(result);
            }
        }
        static UnityExtensions()
        {
            var field = typeof(UnityEngine.Object).GetField("m_CachedPtr", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

            if (field != null)
            {
                UnityObjectCachedPtrFieldGetter = EmitUtilities.CreateInstanceFieldGetter <UnityEngine.Object, IntPtr>(field);
            }
        }
예제 #3
0
        static InspectorUtilities()
        {
            var mPropertyField = typeof(SerializedObject).GetField("m_Property", Flags.InstanceAnyVisibility);

            if (mPropertyField != null)
            {
                mPropertyFieldGetter = EmitUtilities.CreateInstanceFieldGetter <SerializedObject, IntPtr>(mPropertyField);
            }
            else
            {
                Debug.LogWarning("The internal Unity field SerializedObject.m_Property has been renamed in this version of Unity!");
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="InspectorValuePropertyInfo{TOwner, TValue}"/> class.
        /// </summary>
        /// <param name="fieldInfo">The field to represent.</param>
        /// <param name="serializationBackend">The serialization backend.</param>
        /// <param name="allowEditable">Whether the property can be editable.</param>
        public InspectorValuePropertyInfo(FieldInfo fieldInfo, SerializationBackend serializationBackend, bool allowEditable)
            : base(fieldInfo, fieldInfo.FieldType.IsValueType ? PropertyType.ValueType : PropertyType.ReferenceType, serializationBackend, allowEditable)
        {
            MemberAliasFieldInfo aliasFieldInfo = fieldInfo as MemberAliasFieldInfo;

            if (aliasFieldInfo != null)
            {
                fieldInfo = aliasFieldInfo.AliasedField;
            }

            this.getter = EmitUtilities.CreateInstanceFieldGetter <TOwner, TValue>(fieldInfo);
            this.setter = EmitUtilities.CreateInstanceFieldSetter <TOwner, TValue>(fieldInfo);
        }
예제 #5
0
        static InspectorUtilities()
        {
            string nativeObjectPtrName = UnityVersion.IsVersionOrGreater(2018, 3) ? "m_NativeObjectPtr" : "m_Property";

            var nativeObjectPtrField = typeof(SerializedObject).GetField(nativeObjectPtrName, Flags.InstanceAnyVisibility);

            if (nativeObjectPtrField != null)
            {
                SerializedObject_nativeObjectPtrGetter = EmitUtilities.CreateInstanceFieldGetter <SerializedObject, IntPtr>(nativeObjectPtrField);
            }
            else
            {
                Debug.LogWarning("The internal Unity field SerializedObject.m_Property (< 2018.3)/SerializedObject.m_NativeObjectPtr (>= 2018.3) has been renamed in this version of Unity!");
            }
        }
예제 #6
0
 public ValueMemberAccessor(FieldInfo fieldInfo)
 {
     this.memberInfo = fieldInfo;
     getter          = EmitUtilities.CreateInstanceFieldGetter <K, T>(fieldInfo);
     setter          = EmitUtilities.CreateInstanceFieldSetter <K, T>(fieldInfo);
 }