Boat Attack使用了Universal RP的许多新图形功能,可以用于探索 Universal RP 的使用方式和技巧。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

84 行
3.1 KiB

using UnityEngine;
using UnityEngine.Playables;
namespace Cinemachine.Timeline
{
public sealed class CinemachineMixer : PlayableBehaviour
{
// The brain that this track controls
private CinemachineBrain mBrain;
private int mBrainOverrideId = -1;
private bool mPlaying;
public override void OnGraphStop(Playable playable)
{
if (mBrain != null)
mBrain.ReleaseCameraOverride(mBrainOverrideId); // clean up
mBrainOverrideId = -1;
}
public override void ProcessFrame(Playable playable, FrameData info, object playerData)
{
base.ProcessFrame(playable, info, playerData);
// Get the brain that this track controls.
// Older versions of timeline sent the gameObject by mistake.
GameObject go = playerData as GameObject;
if (go == null)
mBrain = (CinemachineBrain)playerData;
else
mBrain = go.GetComponent<CinemachineBrain>();
if (mBrain == null)
return;
// Find which clips are active. We can process a maximum of 2.
// In the case that the weights don't add up to 1, the outgoing weight
// will be calculated as the inverse of the incoming weight.
int activeInputs = 0;
ICinemachineCamera camA = null;
ICinemachineCamera camB = null;
float camWeight = 1f;
for (int i = 0; i < playable.GetInputCount(); ++i)
{
CinemachineShotPlayable shot
= ((ScriptPlayable<CinemachineShotPlayable>)playable.GetInput(i)).GetBehaviour();
float weight = playable.GetInputWeight(i);
if (shot != null && shot.VirtualCamera != null
&& playable.GetPlayState() == PlayState.Playing
&& weight > 0.0001f)
{
if (activeInputs == 1)
camB = camA;
camWeight = weight;
camA = shot.VirtualCamera;
++activeInputs;
if (activeInputs == 2)
break;
}
}
float deltaTime = info.deltaTime;
if (!mPlaying)
{
if (mBrainOverrideId < 0)
mLastOverrideFrame = -1;
float time = Time.realtimeSinceStartup;
deltaTime = Time.unscaledDeltaTime;
if (!Application.isPlaying && (mLastOverrideFrame < 0 || time - mLastOverrideFrame > Time.maximumDeltaTime))
deltaTime = -1;
mLastOverrideFrame = time;
}
// Override the Cinemachine brain with our results
mBrainOverrideId = mBrain.SetCameraOverride(
mBrainOverrideId, camB, camA, camWeight, deltaTime);
}
float mLastOverrideFrame;
public override void PrepareFrame(Playable playable, FrameData info)
{
mPlaying = info.evaluationType == FrameData.EvaluationType.Playback;
}
}
}