统一:仅当角色到达 Y 轴上的某个点时才用相机跟踪玩家移动?
Unity: Track player movement with camera only when character reaches a certain point on the Y axis?
我目前正在使用 Unity 开发一款 2D 平台游戏。当玩家跳跃时,我会阻止摄像机跟随他们,以便让玩家看到他们下面的东西。然而,我实现了一个机制,允许玩家在抓住敌人时进行二段跳,而这种二段跳会让玩家跳过屏幕的边界。我想知道如何让相机仅在玩家离开特定边界时顺畅地跟随玩家。我编写了以断断续续的方式执行此操作的基本代码。我将包括 gif 以显示我的游戏当前的行为方式,以及我希望它如何行为的示例。
这是我在相机控制器中编写的代码:
transform.position = new Vector3(player.position.x, 50, -100);
if (player.position.y > 50)
{
transform.position = player.position - transform.forward * camDist + Vector3.up * playerHeight;
}
下面是我的代码现在做什么的嵌入式 imgur gif:
<blockquote class="imgur-embed-pub" lang="en" data-id="a/houedOV" data-context="false" ><a href="//imgur.com/a/houedOV"></a></blockquote><script async src="//s.imgur.com/min/embed.js" charset="utf-8"></script>
下面是我正在努力实现的示例:
<blockquote class="imgur-embed-pub" lang="en" data-id="a/deg5yeq"><a href="//imgur.com/a/deg5yeq"></a></blockquote><script async src="//s.imgur.com/min/embed.js" charset="utf-8"></script>
您应该将相机从原点移动到目的地,而不是立即将相机设置到目的地(调用 1 帧或 1 次更新)
尝试使用此代码设置相机位置
void Update(){
// ...
Vector2 destination = Vector2.zero; // your camera destination you expected
float maxMoveDistance = 1; // maximum distance to move camera in each frame
camera.transform.position = Vector2.MoveTowards(camera.transform.position, destination, maxMoveDistance); // move camera to destination
}
好的,我找到了我自己问题的答案!
就这么简单:
void Update()
{
if (player.position.y > 50)
{
transform.position = new Vector3(player.position.x, player.position.y, -100);
}
else
{
transform.position = new Vector3(player.position.x, 50, -100);
}
我目前正在使用 Unity 开发一款 2D 平台游戏。当玩家跳跃时,我会阻止摄像机跟随他们,以便让玩家看到他们下面的东西。然而,我实现了一个机制,允许玩家在抓住敌人时进行二段跳,而这种二段跳会让玩家跳过屏幕的边界。我想知道如何让相机仅在玩家离开特定边界时顺畅地跟随玩家。我编写了以断断续续的方式执行此操作的基本代码。我将包括 gif 以显示我的游戏当前的行为方式,以及我希望它如何行为的示例。
这是我在相机控制器中编写的代码:
transform.position = new Vector3(player.position.x, 50, -100);
if (player.position.y > 50)
{
transform.position = player.position - transform.forward * camDist + Vector3.up * playerHeight;
}
下面是我的代码现在做什么的嵌入式 imgur gif:
<blockquote class="imgur-embed-pub" lang="en" data-id="a/houedOV" data-context="false" ><a href="//imgur.com/a/houedOV"></a></blockquote><script async src="//s.imgur.com/min/embed.js" charset="utf-8"></script>
下面是我正在努力实现的示例:
<blockquote class="imgur-embed-pub" lang="en" data-id="a/deg5yeq"><a href="//imgur.com/a/deg5yeq"></a></blockquote><script async src="//s.imgur.com/min/embed.js" charset="utf-8"></script>
您应该将相机从原点移动到目的地,而不是立即将相机设置到目的地(调用 1 帧或 1 次更新)
尝试使用此代码设置相机位置
void Update(){
// ...
Vector2 destination = Vector2.zero; // your camera destination you expected
float maxMoveDistance = 1; // maximum distance to move camera in each frame
camera.transform.position = Vector2.MoveTowards(camera.transform.position, destination, maxMoveDistance); // move camera to destination
}
好的,我找到了我自己问题的答案!
就这么简单:
void Update()
{
if (player.position.y > 50)
{
transform.position = new Vector3(player.position.x, player.position.y, -100);
}
else
{
transform.position = new Vector3(player.position.x, 50, -100);
}