protected override void LoadString(string data)
    {
        PBSplineAnimator animator = GetComponent <PBSplineAnimator>();

        animator.Clear();

        string realData = data.Substring(SaveStrHead().Length);

        string[] keyframeStrs = realData.Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
        for (int i = 0; i < keyframeStrs.Length; i++)
        {
            List <SplineNode> nodes    = new List <SplineNode>();
            string[]          nodeStrs = keyframeStrs[i].Split(new[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries);
            int nodeCount = nodeStrs.Length / 6;
            for (int j = 0; j < nodeCount; j++)
            {
                float posx = float.Parse(nodeStrs[j * 6]);
                float posy = float.Parse(nodeStrs[j * 6 + 1]);
                float posz = float.Parse(nodeStrs[j * 6 + 2]);
                float dirx = float.Parse(nodeStrs[j * 6 + 3]);
                float diry = float.Parse(nodeStrs[j * 6 + 4]);
                float dirz = float.Parse(nodeStrs[j * 6 + 5]);
                nodes.Add(new SplineNode(
                              new Vector3(posx, posy, posz),
                              new Vector3(dirx, diry, dirz)));
            }

            animator.AddKeyframe(nodes);
        }

        animator.SetKeyframe(0);
    }
    protected override string SaveString(string format)
    {
        StringBuilder sb = new StringBuilder(SaveStrHead());

        //save all keyframe nodes
        PBSplineAnimator animator = GetComponent <PBSplineAnimator>();

        if (animator.KeyframeCount == 0)
        {
            //default add current spline node as first keyframe
            animator.AddKeyframe(spline.nodes);
        }

        for (int i = 0; i < animator.KeyframeCount; i++)
        {
            PBSplineKeyframe keyframe = animator.Keyframes[i];
            for (int j = 0; j < keyframe.nodes.Count; j++)
            {
                SplineNode node = keyframe.nodes[j];
                sb.Append(node.position.x.ToString(format) + ",");
                sb.Append(node.position.y.ToString(format) + ",");
                sb.Append(node.position.z.ToString(format) + ",");
                sb.Append(node.direction.x.ToString(format) + ",");
                sb.Append(node.direction.y.ToString(format) + ",");
                sb.Append(node.direction.z.ToString(format));

                if (j < keyframe.nodes.Count - 1)
                {
                    sb.Append(";");
                }
            }

            if (i < animator.KeyframeCount - 1)
            {
                sb.Append("|");
            }
        }

        return(sb.ToString());
    }
Exemple #3
0
 private void OnEnable()
 {
     animator = target as PBSplineAnimator;
     spline   = animator.GetComponent <Spline>();
 }