-
Notifications
You must be signed in to change notification settings - Fork 0
/
AnimationJobTest_TempFix.cs
67 lines (55 loc) · 2.33 KB
/
AnimationJobTest_TempFix.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using UnityEngine;
using UnityEngine.Animations;
using UnityEngine.Playables;
using UnityEngine.UI;
[RequireComponent(typeof(Animator))]
public class AnimationJobTest_TempFix : MonoBehaviour
{
public Text connectionText;
public Text motionText;
public Text poseText;
public Button switchButton;
private PlayableGraph _graph;
private ScriptPlayable<MyPlayableBehaviour> _sp;
private AnimationLayerMixerPlayable _almp; // Used as a temporary fix for the issue
private AnimationScriptPlayable _asp;
private bool _connectAspToFirstPort = true;
private void Awake()
{
switchButton.onClick.AddListener(SwitchConnection);
_graph = PlayableGraph.Create("Animation Job Test");
_graph.SetTimeUpdateMode(DirectorUpdateMode.GameTime);
_sp = ScriptPlayable<MyPlayableBehaviour>.Create(_graph, 1);
_almp = AnimationLayerMixerPlayable.Create(_graph, 2);
_asp = AnimationScriptPlayable.Create(_graph, new MyAnimJob());
// Insert a mixer between the _sp and the _asp to temporarily fix the issue
connectionText.text = _connectAspToFirstPort ? "Connect to Port 0" : "Connect to Port 1";
_sp.ConnectInput(0, _almp, 0, 1f);
_almp.SetInputWeight(0, 1f);
_almp.SetInputWeight(1, 1f);
if (_connectAspToFirstPort) _almp.ConnectInput(0, _asp, 0, 1f);
else _almp.ConnectInput(1, _asp, 0, 1f);
var animOutput = AnimationPlayableOutput.Create(_graph, "Anim Output", GetComponent<Animator>());
animOutput.SetSourcePlayable(_sp);
_graph.Play();
}
private void LateUpdate()
{
var jobData = _asp.GetJobData<MyAnimJob>();
motionText.text = $"ProcessRootMotion Counter: {jobData.motionCounter}";
poseText.text = $"ProcessAnimation Counter: {jobData.poseCounter}";
}
private void OnDestroy()
{
_graph.Destroy();
}
public void SwitchConnection()
{
_connectAspToFirstPort = !_connectAspToFirstPort;
connectionText.text = _connectAspToFirstPort ? "Connect to Port 0" : "Connect to Port 1";
_almp.DisconnectInput(0);
_almp.DisconnectInput(1);
if (_connectAspToFirstPort) _almp.ConnectInput(0, _asp, 0, 1f);
else _almp.ConnectInput(1, _asp, 0, 1f);
}
}