使摄像机仅在 Y 轴上跟随目标

本文关键字:跟随 目标 摄像机 | 更新日期: 2023-09-27 18:32:53

下面的脚本(附加到主摄像头(使摄像头能够流畅地跟随特定目标。但它遵循 x 轴和 y 轴上的目标。我们必须进行哪些更改才能使相机仅在Y轴上跟随目标,同时永远保持其原始x轴?

public float interpVelocity;
public float minDistance;
public float followDistance;
public GameObject target;
public Vector3 offset;
Vector3 targetPos;
void Start () {
    targetPos = transform.position;
}
void LateUpdate () {
    if (target)
    {
        Vector3 posNoZ = transform.position;
        posNoZ.z = target.transform.position.z;
        Vector3 targetDirection = (target.transform.position - posNoZ);
        interpVelocity = targetDirection.magnitude * 5f;
        targetPos = transform.position + (targetDirection.normalized * interpVelocity * Time.deltaTime); 
        transform.position = Vector3.Lerp( transform.position, targetPos + offset, 0.25f);
    }
}

使摄像机仅在 Y 轴上跟随目标

您可以通过仅分配 Y 轴而不是整个向量来简单地做到这一点。你可以尝试这样的东西,

void LateUpdate () {
    if (target)
    {
        Vector3 posNoZ = transform.position;
        posNoZ.z = target.transform.position.z;
        Vector3 targetDirection = (target.transform.position - posNoZ);
        interpVelocity = targetDirection.magnitude * 5f;
        Vector3 factorTowardsTarget = (targetDirection.normalized * interpVelocity * Time.deltaTime);
        targetPos = new Vector3(transform.position.x,transform.position.y + factorTowardsTarget.y,transform.position.z); 
        transform.position = Vector3.Lerp( transform.position, targetPos + offset, 0.25f);
    }
}

尝试将最后一行代码替换为transform.position.y = targetPos + offset; 我的 Unity C# 有点生疏,所以告诉我这是否不起作用。

为了保留vector3.lerp,另一种可能的替代方案是编写this.transform.position.x分配x值的位置

在你的最后一行,而不是

transform.position = Vector3.Lerp( transform.position, targetPos + offset, 0.25f);

。试试这个:

Vector3 targetVec = targetPos + offset;
transform.position = Vector3.Lerp(transform.position,
                                  new Vector3(transform.position.x, targetVec.y, targetVec.z),
                                  0.25f);

在这里,我正在更改 Vector-lerp 的目标,使其具有我们预期的 y 和 z,但保留原始变换的 x 坐标。

我希望这有所帮助!