コード例 #1
0
    private void OnGUI()
    {
        // blueTexture = EditorGUILayout.ObjectField("Texture", blueTexture, typeof(Texture), true) as Texture;
        //  if(GUILayout.Button(blueTexture))
        //  {

        //   }
        //making sure the everything is in the right spot based on the blending tree, so data is not lost
        currentTree = EditorGUILayout.ObjectField("Blend Tree", currentTree, typeof(BlendingTree), true) as BlendingTree;
        if (currentTree == null)
        {
            GUILayout.Label("You need a new tree, create a new scriptable object in assets", EditorStyles.boldLabel);
        }
        if (currentTree != null)
        {
            if (currentTree.getRoot() == null)
            {
                currentTree.SetRoot(new BlendNode(blendType.BLEND_INVALID));
                currentNodeType = blendType.BLEND_INVALID;
            }
            else
            {
                if (currentNode == -1)
                {
                    currentNode = currentTree.getRoot().currentIndex;
                }
                //if root is an invalid node-> create a new node
                if (currentTree.getRoot().nodeType == blendType.BLEND_INVALID)
                {
                    //currentNodeType = (blendType)EditorGUILayout.EnumPopup("root blend node type", currentNodeType);
                    if (currentNodeType != blendType.BLEND_INVALID && currentNodeType != currentTree.getRoot().nodeType)
                    {
                        currentTree.SetRoot(changeNewNode(currentNodeType));
                        currentNode = currentTree.getRoot().currentIndex;
                    }
                }
                else
                {
                    nodeWorkings();
                }
            }
        }
    }
コード例 #2
0
 public blendPoseData useBlendTree(BlendingTree tree, int keyFrameIndex)
 {
     return(NodeTree[0].blendOperation(tree, keyFrameIndex));
 }
コード例 #3
0
    public virtual blendPoseData blendOperation(BlendingTree parentTree, int currentFrameID)
    {
        blendPoseData firstPose  = new blendPoseData();
        blendPoseData secondPose = new blendPoseData();
        int           length     = 0;

        switch (nodeType)
        {
        case blendType.BLEND_LERP:
            firstPose  = parentTree.getIndexedNode(nextID1).blendOperation(parentTree, currentFrameID);
            secondPose = parentTree.getIndexedNode(nextID2).blendOperation(parentTree, currentFrameID);

            length = firstPose.size;

            for (int i = 0; i < length; i++)
            {
                animationTransformData transformData;

                transformData = blendStatic.lerp(firstPose.getPoseData(i), secondPose.getPoseData(i), parameter1, true);
                firstPose.setPoseData(transformData, i);
            }
            return(firstPose);

        case blendType.BLEND_ADD:
            firstPose  = parentTree.getIndexedNode(nextID1).blendOperation(parentTree, currentFrameID);
            secondPose = parentTree.getIndexedNode(nextID2).blendOperation(parentTree, currentFrameID);

            length = firstPose.size;

            for (int i = 0; i < length; i++)
            {
                animationTransformData transformData;

                transformData = blendStatic.add(firstPose.getPoseData(i), secondPose.getPoseData(i), true);
                firstPose.setPoseData(transformData, i);
            }
            return(firstPose);

        case blendType.BLEND_SCALE:
            firstPose = parentTree.getIndexedNode(nextID1).blendOperation(parentTree, currentFrameID);

            length = firstPose.size;

            for (int i = 0; i < length; i++)
            {
                animationTransformData transformData = firstPose.getPoseData(i);
                identity newIdentity = new identity();
                transformData = blendStatic.scale(newIdentity, transformData, parameter1, true);
                firstPose.setPoseData(transformData, i);
            }
            return(firstPose);

        case blendType.BLEND_AVG:
            firstPose  = parentTree.getIndexedNode(nextID1).blendOperation(parentTree, currentFrameID);
            secondPose = parentTree.getIndexedNode(nextID2).blendOperation(parentTree, currentFrameID);
            length     = firstPose.size;

            for (int i = 0; i < length; i++)
            {
                animationTransformData transformData;
                identity nIdentity = new identity();

                transformData = blendStatic.average(nIdentity, firstPose.getPoseData(i), secondPose.getPoseData(i), parameter1, parameter2, true);
                firstPose.setPoseData(transformData, i);
            }
            return(firstPose);

        case blendType.BLEND_END:
            blendPoseData newPoseData = new blendPoseData();
            newPoseData.setData(clip, currentFrameID);
            return(newPoseData);

        default:
            return(firstPose);
        }
    }