首页 > 解决方案 > Unity:让相机滚动而不是跳转到某个位置

问题描述

在我的小平台游戏中,我有一个可以跳跃的角色。如果他跳得足够高,相机应该也跟着角色向上。如果他不够高,相机将停留在其 Y 轴上并且仅通过 X 轴跟随玩家。我已经做到了这一点:

void FixedUpdate()
{
    float posX = Mathf.SmoothDamp(transform.position.x, player.transform.position.x, ref velocty.x, smoothTimeX);
    float posY = Mathf.SmoothDamp(transform.position.y, (player.transform.position.y + OffSetY), ref velocty.y, smoothTimeY);

    if(player.transform.position.y > heightOfPlayerForCamFollow) // change camera hight only when player has reached certain height level
    {
        transform.position = new Vector3(posX, posY, transform.position.z);
    }
    else
    {
        transform.position = new Vector3(posX, 0, transform.position.z);
    }


}

但是,现在,一旦玩家达到一定的跳跃高度,摄像机就会跳转到玩家的位置,而不是跟随他。仅仅因为我给它玩家 Y 位置的事实。我将如何调整我的代码以使相机跟随而不是传送给玩家?

谢谢你 :)

标签: unity3d

解决方案


对我来说,最好的方法似乎是将条件移动到不同的地方。您可以根据 if 设置目标 Y 值,但无论如何都要使用 smoothdamp 进行插值,因此它会平滑地返回 0(或任何您的基值)

void FixedUpdate()
{
    float posX = Mathf.SmoothDamp(transform.position.x, player.transform.position.x, ref velocty.x, smoothTimeX);
    float yTarget=0;
    if(player.transform.position.y > heightOfPlayerForCamFollow) 
         yTarget=(player.transform.position.y + OffSetY) 
     else 
        yTarget=0;
    float posY =Mathf.SmoothDamp(transform.position.y, yTarget, ref velocty.y, smoothTimeY);
    transform.position = new Vector3(posX, posY, transform.position.z);


}

推荐阅读