public void CalculateOffsets(List <Vector3> trace, out Vector3 endPosition) { //Vector3 opos = transform.position; endPosition = transform.position; if (referenceMesh == null) { return; } GameObject ob = GameObject.Instantiate(referenceMesh, transform.position, transform.rotation) as GameObject; ob.hideFlags = HideFlags.HideAndDontSave; Transform root = SearchRec(ob.transform, boneRoot); if (root == null) { throw new System.Exception("Could not find root transform"); } Animation anim = ob.GetComponent <Animation>(); if (anim == null) { anim = ob.AddComponent <Animation>(); } for (int i = 0; i < sequence.Length; i++) { anim.AddClip(sequence[i].clip, sequence[i].clip.name); } Vector3 prevOffset = Vector3.zero; Vector3 position = transform.position; Vector3 firstOffset = Vector3.zero; for (int i = 0; i < sequence.Length; i++) { LinkClip c = sequence[i]; if (c == null) { endPosition = position; return; } anim[c.clip.name].enabled = true; anim[c.clip.name].weight = 1; for (int repeat = 0; repeat < c.loopCount; repeat++) { anim[c.clip.name].normalizedTime = 0; anim.Sample(); Vector3 soffset = root.position - transform.position; if (i > 0) { position += prevOffset - soffset; } else { firstOffset = soffset; } for (int t = 0; t <= 20; t++) { float tf = t / 20.0f; anim[c.clip.name].normalizedTime = tf; anim.Sample(); Vector3 tmp = position + (root.position - transform.position) + c.velocity * tf * c.clip.length; trace.Add(tmp); } position = position + c.velocity * 1 * c.clip.length; anim[c.clip.name].normalizedTime = 1; anim.Sample(); Vector3 eoffset = root.position - transform.position; prevOffset = eoffset; } anim[c.clip.name].enabled = false; anim[c.clip.name].weight = 0; } position += prevOffset - firstOffset; GameObject.DestroyImmediate(ob); endPosition = position; }
public void CalculateOffsets(List <Vector3> trace, out Vector3 endPosition) { endPosition = base.transform.position; if (this.referenceMesh != null) { GameObject obj2 = UnityEngine.Object.Instantiate(this.referenceMesh, base.transform.position, base.transform.rotation) as GameObject; obj2.hideFlags = HideFlags.HideAndDontSave; Transform transform = SearchRec(obj2.transform, this.boneRoot); if (transform == null) { throw new Exception("Could not find root transform"); } Animation component = obj2.GetComponent <Animation>(); if (component == null) { component = obj2.AddComponent <Animation>(); } for (int i = 0; i < this.sequence.Length; i++) { component.AddClip(this.sequence[i].clip, this.sequence[i].clip.name); } Vector3 zero = Vector3.zero; Vector3 position = base.transform.position; Vector3 vector3 = Vector3.zero; for (int j = 0; j < this.sequence.Length; j++) { LinkClip clip = this.sequence[j]; if (clip == null) { endPosition = position; return; } component[clip.clip.name].enabled = true; component[clip.clip.name].weight = 1f; for (int k = 0; k < clip.loopCount; k++) { component[clip.clip.name].normalizedTime = 0f; component.Sample(); Vector3 vector4 = transform.position - base.transform.position; if (j > 0) { position += zero - vector4; } else { vector3 = vector4; } for (int m = 0; m <= 20; m++) { float num5 = ((float)m) / 20f; component[clip.clip.name].normalizedTime = num5; component.Sample(); Vector3 item = (position + (transform.position - base.transform.position)) + ((Vector3)((clip.velocity * num5) * clip.clip.length)); trace.Add(item); } position += (Vector3)((clip.velocity * 1f) * clip.clip.length); component[clip.clip.name].normalizedTime = 1f; component.Sample(); zero = transform.position - base.transform.position; } component[clip.clip.name].enabled = false; component[clip.clip.name].weight = 0f; } position += zero - vector3; UnityEngine.Object.DestroyImmediate(obj2); endPosition = position; } }