Esempio n. 1
0
    private AnimatorMotion ReadNodeFromSerializedNodes(AnimatorState state, int index)
    {
        SerializableMotion    serialisedBo = state.serialisedMotions[index];
        List <AnimatorMotion> children     = new List <AnimatorMotion>();

        for (int i = 0; i < serialisedBo.childCount; i++)
        {
            children.Add(ReadNodeFromSerializedNodes(state, serialisedBo.indexOfFirstChild + i));
        }

        if (serialisedBo.isAnimation)
        {
            AnimatorClip anim = new AnimatorClip();
            anim.name      = serialisedBo.name;
            anim.data      = serialisedBo.animatorData;
            anim.treeIndex = index;
            return(anim);
        }
        else
        {
            AnimatorBlendTree blend = new AnimatorBlendTree();
            blend.name                 = serialisedBo.name;
            blend.positions            = serialisedBo.positions;
            blend.blendParameterIndex  = serialisedBo.blendParameterIndex;
            blend.blendParameterIndexY = serialisedBo.blendParameterIndexY;
            blend.resolution           = serialisedBo.resolution;
            blend.weightTable          = DeserializeWeightTable(serialisedBo.weightTable);
            blend.motions              = children.ToArray();
            blend.motionCount          = children.Count;
            blend.weights              = new FP[blend.motionCount];
            blend.treeIndex            = index;
            return(blend);
        }
    }
Esempio n. 2
0
    public void SerialiseObject(AnimatorState state, AnimatorMotion mo = null)
    {
        SerializableMotion serialisedBo = new SerializableMotion();

        if (mo == null)//initial blend object will be patched in on first call
        {
            mo = state.motion;
        }

        if (mo is AnimatorClip)
        {
            AnimatorClip anim = mo as AnimatorClip;
            serialisedBo.isAnimation       = true;
            serialisedBo.name              = anim.data.clipName;
            serialisedBo.animatorData      = anim.data;
            serialisedBo.childCount        = 0;
            serialisedBo.indexOfFirstChild = state.serialisedMotions.Count + 1;

            state.serialisedMotions.Add(serialisedBo);
        }

        if (mo is AnimatorBlendTree)
        {
            AnimatorBlendTree blend = mo as AnimatorBlendTree;
            serialisedBo.isAnimation          = false;
            serialisedBo.name                 = blend.name;//string.Format("Tree of {0}", blend.motionCount);
            serialisedBo.positions            = blend.positions;
            serialisedBo.blendParameterIndex  = blend.blendParameterIndex;
            serialisedBo.blendParameterIndexY = blend.blendParameterIndexY;
            serialisedBo.weightTable          = SerializeWeightTable(blend.weightTable);
            serialisedBo.resolution           = blend.resolution;

            serialisedBo.childCount        = blend.motionCount;
            serialisedBo.indexOfFirstChild = state.serialisedMotions.Count + 1;

            state.serialisedMotions.Add(serialisedBo);
            foreach (var child in blend.motions)
            {
                SerialiseObject(state, child);
            }
        }
    }