public override void ReadFrom(object obj)
        {
            base.ReadFrom(obj);

            RuntimeAnimationClip clip = (RuntimeAnimationClip)obj;

            if (clip == null)
            {
                return;
            }

            ICollection <RuntimeAnimationProperty> properties = clip.Properties;

            if (properties != null)
            {
                int index = 0;
                Properties = new PersistentRuntimeAnimationProperty <TID> [properties.Count];
                foreach (RuntimeAnimationProperty property in properties)
                {
                    Properties[index] = new PersistentRuntimeAnimationProperty <TID>();
                    Properties[index].ReadFrom(property);
                    index++;
                }
            }
        }
        public override void ReadFrom(object obj)
        {
            base.ReadFrom(obj);

            RuntimeAnimationProperty property = (RuntimeAnimationProperty)obj;

            if (property == null)
            {
                return;
            }

            ComponentTypeName     = property.ComponentTypeName;
            ComponentDisplayName  = property.ComponentDisplayName;
            PropertyName          = property.PropertyName;
            PropertyDisplayName   = property.PropertyDisplayName;
            AnimationPropertyName = property.AnimationPropertyName;

            if (property.Children != null)
            {
                Children = new List <PersistentRuntimeAnimationProperty <TID> >();
                for (int i = 0; i < property.Children.Count; ++i)
                {
                    PersistentRuntimeAnimationProperty <TID> persistentChildProperty = new PersistentRuntimeAnimationProperty <TID>();
                    persistentChildProperty.ReadFrom(property.Children[i]);
                    Children.Add(persistentChildProperty);
                }
            }

            if (property.Curve != null)
            {
                Curve = new PersistentAnimationCurve <TID>();
                Curve.ReadFrom(property.Curve);
            }
        }