在Unity中如何平滑地将摄像机从当前位置移动到特定位置?

3
我有一个拍摄器,可以围绕物体旋转,展示所拍摄的物体。由于该物体相当大,很容易潜在地失去位置并想要返回起始位置,我希望通过一个按钮来实现此操作。
我也希望这个过渡不会很突兀,在当前位置和指定位置之间进行平滑过渡。我意识到这是一个与interp相关的问题,但我不知道从哪里开始。
到目前为止,我的基本变换代码是:
public Camera MainCamera;

public void UserClickedCameraResetButton()
{
    MainCamera.transform.position = new Vector3(106, 68, 15);
    MainCamera.transform.rotation = new Vector4(40, 145, 0);
}

通常情况下非常感谢您。

更新了可以解决我的问题的代码。

public Camera MainCamera;
public GameObject TargetPosition;
public int speed = 2;
bool camera_move_enabled = false;

void Update()
{

    if (camera_move_enabled)
    {
        MainCamera.transform.position = Vector3.Lerp(transform.position, TargetPosition.transform.position, speed * Time.deltaTime);
        MainCamera.transform.rotation = Quaternion.Lerp(transform.rotation, TargetPosition.transform.rotation, speed * Time.deltaTime);
    }

}

public void UserClickedCameraResetButton()
{
    TargetPosition.transform.position = new Vector3(-106.2617f, 68.81419f, 14.92558f);
    TargetPosition.transform.rotation = Quaternion.Euler(39.7415f, 145.0724f, 0);
    camera_move_enabled = true;
}
1个回答

4

尝试这个,将变换位置和旋转设置为目标位置对象。由于过渡必须在多个帧上完成,因此您必须将其放在更新方法下。您可以设置一个变量以启用或禁用相机移动。只需更改目标位置并启用相机移动即可移动相机。

public GameObject Targetposition;
public bool camera_move_enabled;

void Update () {

  if(camera_move_enabled){
       Maincamera.transform.position = Vector3.Lerp (transform.position, Targetposition.transform.position, speed * Time.deltaTime);
       Maincamera.transform.rotation = Quaternion.Lerp (transform.rotation, Targetposition.transform.rotation, speed * Time.deltaTime);
  }

}

public void UserClickedCameraResetButton()
{
    Targetposition.transform.position = new Vector3(106, 68, 15);
    Targetposition.transform.rotation = new Vector4(40, 145, 0);
    camera_move_enabled = true;
}

禁用相机移动功能后进行转场。将速度值(float)更改为更快/更慢的转换。
我也是Unity的新手,所以这可能不是最好的解决方案 :)

你可以添加一个布尔值来检查camera_move_enable状态。我需要检查一下 Targetposition是什么,因为目前它会引起一些错误。 - Tim Hanson
Targetposition 是一个游戏对象。创建另一个摄像机并将其设置为 Targetposition,这样您就可以看到最终的摄像机视图,并进行调整。 - Stalker
搞定了,不得不将“vector4”更改为“quaternion.euler”,我会更新 OP 并提供可用代码。现在唯一的问题是如何解决布尔值以实现一次点击的解决方案,目前必须点击并保持按住状态,才能将相机拉回到之前的位置。 - Tim Hanson
只需在鼠标单击时调用 UserClickedCameraResetButton() 方法。不明白为什么它会回到起始位置。 - Stalker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接