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()); }
private void OnEnable() { animator = target as PBSplineAnimator; spline = animator.GetComponent <Spline>(); }