animator | Contoh Animator yang memanggil metode ini. |
jobHandle | JobHandle pekerjaan yang perlu dijalankan sebelum pekerjaan aimator. |
Membuat ketergantungan antara pekerjaan aimator dan pekerjaan yang diwakili oleh pegangan pekerjaan yang disediakan. Untuk menambahkan beberapa ketergantungan pekerjaan, sebut metode ini untuk setiap pekerjaan yang perlu dijalankan sebelum pekerjaan Animator.
Setelah setiap pembaruan dependensi Animator dibilas.
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(); } }