Параметры
animator | Экземпляр Animator, вызывающий этот метод. |
jobHandle | JobHandle задания, которое необходимо запустить перед заданиями аниматора. |
Описание
Создает зависимость между заданиями аниматора и заданием, представленным предоставленным дескриптором задания. Чтобы добавить несколько зависимостей заданий, вызовите этот метод для каждого задания, которое необходимо запустить перед заданиями аниматора.
После каждого обновления зависимости Animator сбрасываются.
using UnityEngine;
using UnityEngine.Animations;
using UnityEngine.Playables;
using Unity.Collections;
using Unity.Jobs;
public class MyMonoBehaviour : MonoBehaviour
{
NativeArray input0;
NativeArray input1;
NativeArray output;
PlayableGraph graph;
Animator animator;
public struct SumDataForJob : IJob
{
[ReadOnly]
public NativeArray input0;
[ReadOnly]
public NativeArray input1;
public NativeArray 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 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(10, Allocator.Persistent);
input1 = new NativeArray(10, Allocator.Persistent);
output = new NativeArray(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();
}
}