Esempio n. 1
0
    private void ExportAnimData(AnimationState animationState, int frame, string dir)
    {
        _sampleAnimation.Stop();
        List <AnimData.FrameData> frameList = new List <AnimData.FrameData>();
        float time  = 0.0f;
        bool  isEnd = false;

        do
        {
            if (time >= animationState.length)
            {
                time  = animationState.length;
                isEnd = true;
            }
            AnimData.FrameData frameData = GetFrameData(animationState, time);
            frameList.Add(frameData);
            time += 1.0f / frame;
            if (isEnd)
            {
                break;
            }
        } while (true);
        AnimData animData = ScriptableObject.CreateInstance <AnimData>();

        animData.frameDatas = frameList.ToArray();
        animData.name       = animationState.name;
        animData.animLen    = animationState.length;
        animData.frame      = frame;
        string path = dir + "/" + animationState.name + ".asset";

        AssetDatabase.CreateAsset(animData, path);
    }
Esempio n. 2
0
    private AnimData.FrameData GetFrameData(AnimationState animationState, float time)
    {
        animationState.enabled = true;
        animationState.weight  = 1.0f;
        animationState.time    = time;
        _sampleAnimation.Sample();
        AnimData.FrameData frameData = new AnimData.FrameData();
        frameData.time = time;
        List <Matrix4x4> matrix4X4s = new List <Matrix4x4>();

        foreach (Transform bone in _bones)
        {
            matrix4X4s.Add(bone.localToWorldMatrix);
        }
        frameData.matrix4X4s = matrix4X4s.ToArray();

        return(frameData);
    }
Esempio n. 3
0
    void ApplyFrame(int f)
    {
        _frame = f;

        AnimData.FrameData frameData = _animData.frameDatas[_frame];
        for (int i = 0; i < _srcPoints.Count; ++i)
        {
            Vector3    point    = _srcPoints[i];
            BoneWeight weight   = _mesh.boneWeights[i];
            Matrix4x4  tempMat0 = frameData.matrix4X4s[weight.boneIndex0] * _bindPoses[weight.boneIndex0];
            Matrix4x4  tempMat1 = frameData.matrix4X4s[weight.boneIndex1] * _bindPoses[weight.boneIndex1];
            Matrix4x4  tempMat2 = frameData.matrix4X4s[weight.boneIndex2] * _bindPoses[weight.boneIndex2];
            Matrix4x4  tempMat3 = frameData.matrix4X4s[weight.boneIndex3] * _bindPoses[weight.boneIndex3];

            Vector3 temp = tempMat0.MultiplyPoint(point) * weight.weight0 +
                           tempMat1.MultiplyPoint(point) * weight.weight1 +
                           tempMat2.MultiplyPoint(point) * weight.weight2 +
                           tempMat3.MultiplyPoint(point) * weight.weight3;

            _newPoints[i] = temp;
        }

        _mesh.SetVertices(_newPoints);
    }