将摄像机从当前位置平稳地移动到特定位置?

时间:2016-03-02 11:53:07

标签: c# camera interpolation unity5

我有一个绕轨道运行的摄像机,在物体周围平移以展示有问题的物体,因为物体相当大,很容易失去你的位置,想要回到起始位置,我想通过按钮完成此操作。

我也希望这种转变不会让人感到震惊,它在当前位置与指定位置之间平滑过渡。我意识到这是一个与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 个答案:

答案 0 :(得分:3)

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

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;
}

转换后禁用camera_move_enabled。将速度值(浮动)更改为更快/更慢的转换。

我也是团结的新手所以这可能不是最好的解决方案:)。