为什么 CorrectPosition 和 FinalPosition 的行为如此奇怪?为什么沿Y轴移动没有被阻挡?
using UnityEngine;
using Cinemachine;
public class LockCameraY : CinemachineExtension
{
public float YPosition;
private bool _isLocked = true;
protected override void PostPipelineStageCallback(CinemachineVirtualCameraBase vcam, CinemachineCore.Stage stage, ref CameraState state, float deltaTime)
{
if (stage == CinemachineCore.Stage.Body)
{
Vector3 newPosition = state.RawPosition;
if (_isLocked)
{
newPosition.y = YPosition;
state.RawPosition = newPosition;
Debug.Log("Raw: " + state.RawPosition);
Debug.Log("Final: " + state.FinalPosition);
Debug.Log("Corrected: " + state.CorrectedPosition);
}
else if (Mathf.Abs(newPosition.y - YPosition) < 0.1) _isLocked = true;
}
}
public void ModifyYLock(float newYPosition)
{
YPosition = newYPosition;
_isLocked = false;
}
}
我尝试将 CinemachineExtension 与 PostPipelineStageCallback 一起使用
编辑:我发现这是因为限制器。是否有可能以某种方式在锁定 y 轴和限制器之间交朋友?
您需要将所需坐标的PositionCorrection更改为0 所以
state.PositionCorrection = yourCorrection