Unity Cinemachine 锁定奇怪的行为

问题描述 投票:0回答:1

为什么 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 轴和限制器之间交朋友?

c# unity-game-engine camera game-engine cinemachine
1个回答
0
投票

您需要将所需坐标的PositionCorrection更改为0 所以

state.PositionCorrection = yourCorrection

© www.soinside.com 2019 - 2024. All rights reserved.