Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
 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;
     }
 }