使相机在跳跃时不跟随y轴上的目标吗?

时间:2019-03-14 12:15:26

标签: c# unity3d

我正在为我的游戏开发课程制作2D平台游戏,但我希望摄像机在角色跳跃时仅跟随X轴上的角色。有人知道如何执行此操作吗?

我的代码在这里:

using UnityEngine;

public class CameraFollow : MonoBehaviour
{
    //Setter noen "variabler" slik at kameraet følger etter spilleren.
    public Transform target;
    public float smoothSpeed = 0.2f;
    public Vector3 offset;

    //Lar oss bestemme om vi vil ha avgrensning for kameraet eller ikke.
    public bool bounds;

    public Vector3 minCameraPos;
    public Vector3 maxCameraPos;



    private void FixedUpdate()
    {
        //Passer på at kameraet ikke bare følger etter spilleren, men ikke hakker, men her kan også "* Time.deltatime" bli lagt til ved 
        //siden av smoothSpeed, og smoothSpeed endres til f.eks 10, slik at kamera følger karakteren saktere enn det karakteren løper.

        Vector3 desiredPosition = target.position + offset;
        Vector3 smoothedPosition = Vector3.Lerp (transform.position, desiredPosition, smoothSpeed);
        transform.position = smoothedPosition;

        //Hvis "Bounds" er sjekket av, så vil avgrensninger for kameraet bli lagt til, men dette blir lagt til manuelt, slik at det kan endres på fra level til level på en enklere måte.
        if (bounds)
        {
            transform.position = new Vector3(Mathf.Clamp(transform.position.x, minCameraPos.x, maxCameraPos.x),
                Mathf.Clamp(transform.position.y, minCameraPos.y, maxCameraPos.y),
                Mathf.Clamp(transform.position.z, minCameraPos.z, maxCameraPos.z));
        }
    }
}

2 个答案:

答案 0 :(得分:2)

这样,您可以将偏移量仅应用于x,z,而不会更改相机的Y位置:

Vector3 desiredPosition = new Vector3(target.position.x + offset.x, transform.position.y, target.position.z + offset.z);

答案 1 :(得分:0)

相机正在跟随目标,但正如我所见,它也在x,y和z中移动。 如果您不想在跳跃时跟随目标,则应该有一个指示器来指示目标何时跳跃。

public PlayerClass target; //Replace --> public Transform target;

在FixedUpdate中

//After the camera movement operations save the y component
originalY = this.transform.position.y;

if(target.IsJumping)
{
    this.transform.position.y = originalY;
}