示例#1
0
        internal static XElement SerializePropertyTrack(MoviePropertyTrack track)
        {
            XElement elem = new XElement("MoviePropertyTrack", SerializeCurveTrackClips(track),
                                         SerializeMovieProperties(track));

            elem.SetAttributeValue("type", track.targetType);
            if (track.targetType == MoviePropertyTrack.ObjectType.Maid)
            {
                elem.SetAttributeValue("maidGuid", track.GetMaidGUID());
            }
            elem.SetAttributeValue("objectTag", track.target.tag);
            elem.SetAttributeValue("objectName", track.target.name);
            elem.SetAttributeValue("componentType", track.component.GetType());

            return(elem);
        }
示例#2
0
        internal static MoviePropertyTrack DeserializePropertyTrack(XElement elem)
        {
            try
            {
                MoviePropertyTrack.ObjectType objectType = (MoviePropertyTrack.ObjectType)GetIntAttr(elem, "type");
                string     objectTag  = elem.Attribute("objectTag").Value;
                string     objectName = elem.Attribute("objectName").Value;
                GameObject obj        = GameObject.Find(objectName);

                if (obj == null)
                {
                    throw new ArgumentNullException($"No GameObject named {objectName} found!");
                }

                Type      componentType = GetTypeAttr(elem, "componentType");
                Component compo         = obj.GetComponent(componentType);
                if (compo == null)
                {
                    throw new ArgumentNullException($"No Component of type {componentType.Name} in GameObject {objectName} found!");
                }
                var curveIdxes = elem.Element("Properties").Elements()
                                 .Select(e => GetIntListAttr(e, "curveIndexes"))
                                 .ToList();

                Dictionary <int, List <int> > propIdxToCurveIdxes = new Dictionary <int, List <int> >();

                for (int i = 0; i < curveIdxes.Count; i++)
                {
                    propIdxToCurveIdxes[i] = curveIdxes[i];
                }

                // Debug.Log("Load: " + obj + " " + compo);
                MoviePropertyTrack track = new MoviePropertyTrack(obj, compo);
                track.clips               = DeserializeCurveClips(elem);
                track.propsToChange       = DeserializeMovieProperties(elem, componentType);
                track.propIdxToCurveIdxes = propIdxToCurveIdxes;

                return(track);
            }
            catch (Exception e)
            {
                Debug.LogError(e);
                return(null);
            }
        }
示例#3
0
 internal static XElement SerializeMovieProperties(MoviePropertyTrack track) =>
 new XElement("Properties",
              track.propsToChange.Select((prop, i) => SerializeMovieProperty(prop, track.GetCurveIdxesForProp(i))));