mirror of
https://github.com/oliverbooth/X10D
synced 2024-11-25 15:18:47 +00:00
fix: only copy Unity-serialized members
This commit is contained in:
parent
ad2d33aa88
commit
a4a1d3b13a
@ -1,6 +1,7 @@
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using X10D.Reflection;
|
||||||
using Object = UnityEngine.Object;
|
using Object = UnityEngine.Object;
|
||||||
|
|
||||||
namespace X10D.Unity;
|
namespace X10D.Unity;
|
||||||
@ -52,7 +53,6 @@ public static class ComponentExtensions
|
|||||||
|
|
||||||
var typeInfo = typeof(T).GetTypeInfo();
|
var typeInfo = typeof(T).GetTypeInfo();
|
||||||
CopyFields(typeInfo, component, targetComponent);
|
CopyFields(typeInfo, component, targetComponent);
|
||||||
CopyProperties(typeInfo, component, targetComponent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -96,7 +96,6 @@ public static class ComponentExtensions
|
|||||||
|
|
||||||
var typeInfo = componentType.GetTypeInfo();
|
var typeInfo = componentType.GetTypeInfo();
|
||||||
CopyFields(typeInfo, component, targetComponent);
|
CopyFields(typeInfo, component, targetComponent);
|
||||||
CopyProperties(typeInfo, component, targetComponent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -184,7 +183,12 @@ public static class ComponentExtensions
|
|||||||
{
|
{
|
||||||
foreach (FieldInfo field in typeInfo.DeclaredFields)
|
foreach (FieldInfo field in typeInfo.DeclaredFields)
|
||||||
{
|
{
|
||||||
if (field.IsStatic)
|
if (field.IsStatic || !field.IsPublic && !field.HasCustomAttribute<SerializeField>())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (field.HasCustomAttribute<NonSerializedAttribute>())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -194,28 +198,6 @@ public static class ComponentExtensions
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void CopyProperties<T>(TypeInfo typeInfo, T component, T targetComponent)
|
|
||||||
where T : Component
|
|
||||||
{
|
|
||||||
foreach (PropertyInfo property in typeInfo.DeclaredProperties)
|
|
||||||
{
|
|
||||||
if (!property.CanRead || !property.CanWrite)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
MethodInfo getMethod = property.GetMethod;
|
|
||||||
MethodInfo setMethod = property.SetMethod;
|
|
||||||
if (getMethod.IsStatic || setMethod.IsStatic)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
object propertyValue = GetNewReferences(component, targetComponent, property.GetValue(component));
|
|
||||||
property.SetValue(targetComponent, propertyValue);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static object GetNewReferences<T>(T component, T targetComponent, object value)
|
private static object GetNewReferences<T>(T component, T targetComponent, object value)
|
||||||
where T : Component
|
where T : Component
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user