示例#1
0
    protected override void CreateGraph(Entity entity, ref Rig rig, ref BlendTree2DRuntime blendTreeData)
    {
        CreateDebugBoneRig(entity, ref rig);
        var ecb = EsBufferSystem.CreateCommandBuffer();

        //Create graph and hook up node a set send message to the correct node
        var set = GraphSystem.Set;

        var kernelData = new BlendTree2DKernelRuntime
        {
            ComponentNode   = set.CreateComponentNode(entity),
            DeltaTimeNode   = set.Create <ConvertDeltaTimeToFloatNode>(),
            BlendTree2DNode = set.Create <BlendTree2DNode>(),
            TimeCounterNode = set.Create <TimeCounterNode>(),
            TimeLoopNode    = set.Create <TimeLoopNode>(),
            RcpNode         = set.Create <FloatRcpNode>(),
            InputNode       = set.Create <Blend2DExtractParameterNode>()
        };

        set.Connect(kernelData.ComponentNode, kernelData.DeltaTimeNode, ConvertDeltaTimeToFloatNode.KernelPorts.Input);
        set.Connect(kernelData.DeltaTimeNode, ConvertDeltaTimeToFloatNode.KernelPorts.Float, kernelData.TimeCounterNode,
                    TimeCounterNode.KernelPorts.DeltaTime);
        set.Connect(kernelData.TimeCounterNode, TimeCounterNode.KernelPorts.Time, kernelData.TimeLoopNode,
                    TimeLoopNode.KernelPorts.InputTime);
        set.Connect(kernelData.TimeLoopNode, TimeLoopNode.KernelPorts.OutputTime, kernelData.BlendTree2DNode,
                    BlendTree2DNode.KernelPorts.NormalizedTime);

        set.Connect(kernelData.BlendTree2DNode, BlendTree2DNode.KernelPorts.Duration, kernelData.RcpNode,
                    FloatRcpNode.KernelPorts.Input);
        set.Connect(kernelData.RcpNode, FloatRcpNode.KernelPorts.Output, kernelData.TimeCounterNode,
                    TimeCounterNode.KernelPorts.Speed);

        set.Connect(kernelData.BlendTree2DNode, BlendTree2DNode.KernelPorts.Output, kernelData.ComponentNode,
                    NodeSetAPI.ConnectionType.Feedback);

        set.Connect(kernelData.ComponentNode, kernelData.InputNode, Blend2DExtractParameterNode.KernelPorts.Input,
                    NodeSetAPI.ConnectionType.Feedback);

        set.Connect(kernelData.InputNode, Blend2DExtractParameterNode.KernelPorts.ParameterX,
                    kernelData.BlendTree2DNode, BlendTree2DNode.KernelPorts.BlendParameterX);
        set.Connect(kernelData.InputNode, Blend2DExtractParameterNode.KernelPorts.ParameterY,
                    kernelData.BlendTree2DNode, BlendTree2DNode.KernelPorts.BlendParameterY);
        //Send Messages to Blend2DNode

        set.SendMessage(kernelData.TimeLoopNode, TimeLoopNode.SimulationPorts.Duration, 1.0f);
        set.SendMessage(kernelData.BlendTree2DNode, BlendTree2DNode.SimulationPorts.Rig, rig);
        set.SendMessage(kernelData.BlendTree2DNode, BlendTree2DNode.SimulationPorts.BlendTree,
                        blendTreeData.BlendTreeAsset);

        //Add the kernelData to this entity
        ecb.AddComponent(entity, kernelData);
    }
    public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
    {
        if (blendTree == null)
        {
            return;
        }

        conversionSystem.DeclareAssetDependency(gameObject, blendTree);

        var rig = dstManager.GetComponentData <Rig>(entity);

        var clipConfiguration = new ClipConfiguration
        {
            Mask = ClipConfigurationMask.LoopValues
        };

        var bakeOptions = new BakeOptions
        {
            ClipConfiguration = clipConfiguration,
            RigDefinition     = rig.Value,
            SampleRate        = 60.0f
        };

        var blendTreeIndex       = BlendTreeConversion.Convert(blendTree, entity, dstManager, bakeOptions);
        var blendTree2DResources = dstManager.GetBuffer <BlendTree2DResource>(entity);

        var blendTreeAsset =
            BlendTreeBuilder.CreateBlendTree2DFromComponents(blendTree2DResources[blendTreeIndex], dstManager, entity);

        conversionSystem.BlobAssetStore.AddUniqueBlobAsset(ref blendTreeAsset);

        var blendTree2DData = new BlendTree2DRuntime
        {
            BlendTreeAsset = blendTreeAsset
        };

        dstManager.AddComponentData(entity, blendTree2DData);

        var blendTree2DParam = new BlendTree2DParamRuntime
        {
            InputMapping = float2.zero,
            StepMapping  = paramStep
        };

        dstManager.AddComponentData(entity, blendTree2DParam);

        dstManager.AddComponent <DeltaTimeRuntime>(entity);
        dstManager.AddComponent <ProcessDefaultAnimationGraph.AnimatedRootMotion>(entity);
    }
示例#3
0
 protected abstract void CreateGraph(Entity entity, ref Rig rig, ref BlendTree2DRuntime blendTreeData);