如何在 Unity 中跳上 Y 轴时让摄像机停止跟随玩家?



真的快。我正在制作一个 2D 游戏,其中我的玩家沿 Y 轴向下移动。没有什么能使播放器恢复,所以我想将相机锁定在播放器上。当我的玩家跳跃时,相机会跟随,这基本上是我试图阻止的,但我似乎找不到一个"简单"的解决方案。如果有人能帮助我,提前感谢!

public Transform target;
public bool X, Y, Z;
public float XOffset, YOffset, ZOffset;
void Update()
{
transform.position = new Vector3(
(X ? target.position.x + XOffset : transform.position.x),
(Y ? target.position.y + YOffset : transform.position.y),
(Z ? target.position.z + ZOffset : transform.position.z));
}

Y为真时,让 y 分量是当前 y 位置和目标的 y 位置加偏移量的最小值。

public Transform target;
public bool X, Y, Z;
public float XOffset, YOffset, ZOffset;
void Update() 
{ 
Vector3 targetPos = target.position;
Vector3 currentPos = transform.position;
transform.position = new Vector3(
X ? targetPos.x + XOffset : currentPos.x, 
Y ? Mathf.Min(currentPos.y, targetPos.y + YOffset) : currentPos.y,
Z ? targetPos.z + ZOffset : currentPos.z);
}

您可以存储相机的最后一个变换位置,并检查它是否比以前更高。然后您可以根据它更改 Y 值。

using UnityEngine;
public class CameraFollow : MonoBehaviour
{
Vector3 LastCameraPosition = Vector3.positiveInfinity;
public Transform target;
public bool X, Y, Z;
public float XOffset, YOffset, ZOffset;
void Update()
{
if (target.position.y < LastCameraPosition.y)
{
LastCameraPosition = target.position;
Y = true;
}
else
{
Y = false;
}
transform.position = new Vector3(
(X ? target.position.x + XOffset : transform.position.x),
(Y ? target.position.y + YOffset : transform.position.y),
(Z ? target.position.z + ZOffset : transform.position.z));
}
}

另一种方法是在玩家在地面上的每一帧更新一个gounded_y变量,并将其用作摄像机 y 的最小值或最大值(取决于方向(。 这样,如果玩家在跳跃后摔倒,凸轮将跟随,但在跳跃期间永远不会向上跟随。

如果您的播放器总是向下,您可以为摄像机更新添加条件

if(character.transform.position.y < camera.transform.position.y){
camera.transform.position = new Vector3(
character.position.x + XOffset,
character.position.y + YOffset,
character.position.z + ZOffset);
}

当然,在这种情况下,摄像机不允许成为玩家的子对象。

最新更新