72 lines
2.3 KiB
C#
72 lines
2.3 KiB
C#
|
using UnityEngine.Playables;
|
||
|
|
||
|
namespace UnityEngine.Timeline
|
||
|
{
|
||
|
class ActivationMixerPlayable : PlayableBehaviour
|
||
|
{
|
||
|
ActivationTrack.PostPlaybackState m_PostPlaybackState;
|
||
|
bool m_BoundGameObjectInitialStateIsActive;
|
||
|
|
||
|
private GameObject m_BoundGameObject;
|
||
|
|
||
|
|
||
|
public static ScriptPlayable<ActivationMixerPlayable> Create(PlayableGraph graph, int inputCount)
|
||
|
{
|
||
|
return ScriptPlayable<ActivationMixerPlayable>.Create(graph, inputCount);
|
||
|
}
|
||
|
|
||
|
public ActivationTrack.PostPlaybackState postPlaybackState
|
||
|
{
|
||
|
get { return m_PostPlaybackState; }
|
||
|
set { m_PostPlaybackState = value; }
|
||
|
}
|
||
|
|
||
|
public override void OnPlayableDestroy(Playable playable)
|
||
|
{
|
||
|
if (m_BoundGameObject == null)
|
||
|
return;
|
||
|
|
||
|
switch (m_PostPlaybackState)
|
||
|
{
|
||
|
case ActivationTrack.PostPlaybackState.Active:
|
||
|
m_BoundGameObject.SetActive(true);
|
||
|
break;
|
||
|
case ActivationTrack.PostPlaybackState.Inactive:
|
||
|
m_BoundGameObject.SetActive(false);
|
||
|
break;
|
||
|
case ActivationTrack.PostPlaybackState.Revert:
|
||
|
m_BoundGameObject.SetActive(m_BoundGameObjectInitialStateIsActive);
|
||
|
break;
|
||
|
case ActivationTrack.PostPlaybackState.LeaveAsIs:
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override void ProcessFrame(Playable playable, FrameData info, object playerData)
|
||
|
{
|
||
|
if (m_BoundGameObject == null)
|
||
|
{
|
||
|
m_BoundGameObject = playerData as GameObject;
|
||
|
m_BoundGameObjectInitialStateIsActive = m_BoundGameObject != null && m_BoundGameObject.activeSelf;
|
||
|
}
|
||
|
|
||
|
if (m_BoundGameObject == null)
|
||
|
return;
|
||
|
|
||
|
int inputCount = playable.GetInputCount();
|
||
|
bool hasInput = false;
|
||
|
for (int i = 0; i < inputCount; i++)
|
||
|
{
|
||
|
if (playable.GetInputWeight(i) > 0)
|
||
|
{
|
||
|
hasInput = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
m_BoundGameObject.SetActive(hasInput);
|
||
|
}
|
||
|
}
|
||
|
}
|