版本:Unity 6 (6000.0)
语言英语
  • C#

AnimatorJobExtensions.AddJobDependency

建议变更

成功!

感谢您帮助我们改善 Unity 文档的质量。虽然我们不能接受所有提交,但我们确实会阅读用户提出的每一条变更建议,并在合适的情况下进行更新。

关闭

提交失败

由于某种原因,您建议的变更无法提交。请在几分钟后重试。感谢您抽出时间帮助我们改善 Unity 文档的质量。

关闭

取消

声明

public static void AddJobDependency(Animator animator, Unity.Jobs.JobHandle jobHandle);

参数

animator 调用此方法的Animator实例。
jobHandle 需要在动画器作业之前运行的作业的JobHandle

描述

在动画器作业与由提供的作业句柄表示的作业之间创建一个依赖项。要添加多个作业依赖项,请为每个需要在 Animator 作业之前运行的作业调用此方法。

每次更新Animator依赖项后均会刷新。

using UnityEngine;
using UnityEngine.Animations;
using UnityEngine.Playables;

using Unity.Collections; using Unity.Jobs;

public class MyMonoBehaviour : MonoBehaviour { NativeArray<int> input0; NativeArray<int> input1; NativeArray<int> output;

PlayableGraph graph; Animator animator;

public struct SumDataForJob : IJob { [ReadOnly] public NativeArray<int> input0;

[ReadOnly] public NativeArray<int> input1;

public NativeArray<int> output;

public void Execute() { for (var i = 0; i < output.Length; ++i) output[i] = input0[i] + input1[i]; } }

public struct MyAnimationJob : IAnimationJob { [ReadOnly] public NativeArray<int> input;

public float sum;

public void ProcessRootMotion(AnimationStream stream) { sum = 0; for (var i = 0; i < input.Length; ++i) sum += input[i]; }

public void ProcessAnimation(AnimationStream stream) {} }

public void Start() { input0 = new NativeArray<int>(10, Allocator.Persistent); input1 = new NativeArray<int>(10, Allocator.Persistent); output = new NativeArray<int>(10, Allocator.Persistent);

for (var i = 0; i < output.Length; i++) { input0[i] = i; input1[i] = 10 * i; output[i] = 0; }

animator = gameObject.AddComponent<Animator>();

graph = PlayableGraph.Create(); var myAnimationJob = new MyAnimationJob(); myAnimationJob.input = output;

var scriptPlayable = AnimationScriptPlayable.Create(graph, myAnimationJob); var playableOutput = AnimationPlayableOutput.Create(graph, "output", animator);

playableOutput.SetSourcePlayable(scriptPlayable); graph.Play(); }

public void Update() { SumDataForJob sumJob; sumJob.input0 = input0; sumJob.input1 = input1; sumJob.output = output;

var jobHandle = sumJob.Schedule(); animator.AddJobDependency(jobHandle); }

public void OnDestroy() { graph.Destroy(); input0.Dispose(); input1.Dispose(); output.Dispose(); } }