unity3d - 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 位置的事实。我将如何调整我的代码以使相机跟随而不是传送给玩家?
谢谢你 :)
解决方案
对我来说,最好的方法似乎是将条件移动到不同的地方。您可以根据 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);
}
推荐阅读
- mysql - 如何将 MySQL 5.7 升级到 MySQL 8.4
- stripe-payments - 当同一张信用卡附加到另一个客户对象时,Stripe 是否会重新运行 $0/$1 授权?
- laravel - Laravel 使用 Supervisor 排队 - 进入 FATAL 状态,启动重试次数过多太快
- android - 安卓软件与互联网网络中的ESP8266实时通信
- ruby - 在 Windows 上安装 gem http_parser
- go - Struct Json Marshaling 导致堆栈溢出
- c++ - QPID C++ 代理和 QPID-CPP SSL 证书
- r - 如何通过在空单元格中插入“NA”来让 R 识别出我的数据框中缺少值?
- java - 阿帕奇骆驼 cxf 肥皂
- git - 如何仅合并现有文件