Instantly share code, notes, and snippets.

Embed
What would you like to do?
Animation C# Jobs 小さなサンプル
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Experimental.Animations;
using Unity.Collections;
public class Sample : MonoBehaviour
{
private NativeArray<TransformStreamHandle> joints;
private NativeArray<TransformSceneHandle> effectors;
private PlayableGraph graph;
void Awake()
{
var animator = GetComponent<Animator>();
graph = PlayableGraph.Create(name);
joints = new NativeArray<TransformStreamHandle>(4, Allocator.Persistent)
{
[0] = animator.BindStreamTransform(transform.Find("Bone1")),
[1] = animator.BindStreamTransform(transform.Find("Bone1/Bone2")),
[2] = animator.BindStreamTransform(transform.Find("Bone1/Bone2/Bone3")),
[3] = animator.BindStreamTransform(transform.Find("Bone1/Bone2/Bone3/Bone4"))
};
AnimatorUtility.OptimizeTransformHierarchy(gameObject, null);
effectors = new NativeArray<TransformSceneHandle>(4, Allocator.Persistent)
{
[0] = animator.BindSceneTransform(new GameObject().transform),
[1] = animator.BindSceneTransform(new GameObject().transform),
[2] = animator.BindSceneTransform(new GameObject().transform),
[3] = animator.BindSceneTransform(new GameObject().transform),
};
var playable = AnimationScriptPlayable.Create(graph, new SampleJob()
{
effectors = effectors,
joints = joints,
});
AnimationPlayableUtilities.Play(animator, playable, graph);
}
void OnDestroy()
{
AnimatorUtility.DeoptimizeTransformHierarchy(gameObject);
graph.Destroy();
effectors.Dispose();
joints.Dispose();
}
}
using UnityEngine.Experimental.Animations;
using Unity.Collections;
public struct SampleJob : IAnimationJob
{
public NativeArray<TransformStreamHandle> joints;
public NativeArray<TransformSceneHandle> effectors;
public void ProcessAnimation(AnimationStream stream)
{
for (int i=0; i<joints.Length; i++)
{
// effectorから取得してストリームに書き込む
var rotation = effectors[i].GetLocalRotation(stream);
joints[i].SetLocalRotation(stream, rotation);
}
}
public void ProcessRootMotion(AnimationStream stream){}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment