private static void ProcessFrameItems(XmlNodeList itemNodes, PPKeyFrameInfo keyFrameInfo, Dictionary <int, PPAnimNodeInfo> animNodeInfos)
    {
        for (int i = 0; i < itemNodes.Count; i++)
        {
            XmlNode         xmlNode       = itemNodes[i];
            PPFrameItemInfo frameItemInfo = new PPFrameItemInfo();

            XmlNode iniInfoNode = xmlNode.SelectSingleNode("init");
            iniInfoNode.GetPosInfo(out frameItemInfo.initPos)
            .GetAngleInfo(out frameItemInfo.initAngle);
            frameItemInfo.index    = i;
            frameItemInfo.targetId = int.Parse(xmlNode.Attributes["targetid"].Value);

            //根据targetId去处理
            XmlAttribute isunit = xmlNode.Attributes["isunit"];
            if (null == isunit)
            {
                frameItemInfo.IsUnit = animNodeInfos[frameItemInfo.targetId].Type == NodeType.Block;
            }
            else
            {
                frameItemInfo.IsUnit = !isunit.Value.Equals("0");
            }

            frameItemInfo.ParseMovements(xmlNode.SelectNodes("movement"));

            keyFrameInfo.AddFrameItemInfo(frameItemInfo);
        }
    }
        public void Init(PPKeyFrameInfo keyFrameInfo, Dictionary <int, GameObject> targets)
        {
            mInfo         = keyFrameInfo;
            KeyFrameItems = new List <PBKeyFrameItem>();

            foreach (PPFrameItemInfo itemInfo in mInfo.itemInfos)
            {
#if !BLOCK_EDITOR
                PBKeyFrameItem frameItem = new PBKeyFrameItem();
#else
                PBKeyFrameItem frameItem = UnityEngine.SceneManagement.SceneManager.GetActiveScene().name.Equals(BlockEditorGlobal.SCENE_PROSPECTUS)
                    ? new PBKeyFrameItem_Prospectus()
                    : new PBKeyFrameItem();
#endif
                frameItem.Init(itemInfo, targets[itemInfo.targetId]);
                frameItem.KeyframeIndex = Index;
                KeyFrameItems.Add(frameItem);
            }

            for (int i = 0; i < KeyFrameItems.Count; i++)
            {
                if (i > 0)
                {
                    KeyFrameItems[i].Previous = KeyFrameItems[i - 1];
                }
                if (i < KeyFrameItems.Count - 1)
                {
                    KeyFrameItems[i].Next = KeyFrameItems[i + 1];
                }
            }
        }
    private static void ProcessKeyframes(XmlNode nodeKeys, List <PPKeyFrameInfo> keyframeInfos, Dictionary <int, PPAnimNodeInfo> animNodeInfos)
    {
        XmlNodeList keyframeNodes = nodeKeys.SelectNodes("keyframe");

        for (int i = 0; i < keyframeNodes.Count; i++)
        {
            XmlNode keyFrameNode = keyframeNodes[i];

            PPKeyFrameInfo keyFrameInfo = new PPKeyFrameInfo();
            keyFrameInfo.index = int.Parse(keyFrameNode.Attributes["index"].Value);

            PBPointInfo pointInfo = null;
            if (keyFrameNode.Attributes["keyPointType"] != null)
            {
                PBPointType pointType = (PBPointType)int.Parse(keyFrameNode.Attributes["keyPointType"].Value);

                string pointInfoStr = null;
                if (pointType != PBPointType.None && keyFrameNode.Attributes["keyPointInfo"] != null)
                {
                    pointInfoStr = keyFrameNode.Attributes["keyPointInfo"].Value;
                }

                string pointTipStr = null;
                if (pointType != PBPointType.None && keyFrameNode.Attributes["keyPointTip"] != null)
                {
                    pointTipStr = keyFrameNode.Attributes["keyPointTip"].Value;
                }

                pointInfo = new PBPointInfo(keyFrameInfo.index, pointType, pointInfoStr, pointTipStr);
            }
            else if (keyFrameNode.Attributes["custom"] != null)
            {
                //兼容旧版本逻辑
                pointInfo = new PBPointInfo(keyFrameInfo.index, PBPointType.GuidePoint, keyFrameNode.Attributes["custom"].Value, null);
            }
            keyFrameInfo.pointInfo = pointInfo;

            ProcessFrameItems(keyFrameNode.SelectNodes("item"), keyFrameInfo, animNodeInfos);
            keyframeInfos.Add(keyFrameInfo);
        }
    }