如何在Unity中平滑旋转相机?

4

我正在使用C#制作2D Unity游戏。现在,我正在尝试让相机旋转,并且我正在使用以下代码:

rotateX = Random.Range (0, 50);
Camera.main.transform.eulerAngles = Vector3(0,0,rotateX);

但是每次我尝试运行游戏时,都会出现错误。有没有什么提示可以让我如何顺畅地从侧面旋转相机?

4个回答

7
您可以通过将代码更改为以下内容来消除错误:
void Update () {
    float rotateX = Random.Range (0, 50);
    transform.eulerAngles = new Vector3(0,0,rotateX);
}

将脚本组件附加到相机上。但随后它会一直随机旋转。

从问题中我不确定您想要什么样的旋转。但是您可以使用例如以下代码:

void Update () {
    transform.Rotate(Vector3.forward, 10.0f * Time.deltaTime);
}

要平滑地旋转相机。只需将第一个参数更改为您想要绕着哪个轴旋转的轴。


如果您在Update()中使用关键字“new”,那么它不会慢慢填满RAM吗? - WastedFreeTime
1
我已经好几年没有编写C#代码了,但我非常确定垃圾回收器会负责在旧变量被新变量替换后删除它们。我知道对于那些有C++背景的人来说,“new”看起来很糟糕。 - maZZZu
是的,C#有一个垃圾回收器,它会负责删除未使用的对象。 - vatbub

3
不要使用 Camera.main。编写一个相机类,然后将其添加到场景中的相机中。像这样使用 transform.rotation:
void Update () 
{
    transform.rotation = Quaternion.Euler(y, x, z);
    transform.position = Quaternion.Euler(y, x, z);
}

更多信息请参见: http://wiki.unity3d.com/index.php?title=MouseOrbitImproved


1
最简单的方法是将该代码放入您想要旋转的当前摄像机所在的游戏对象中。
public class swipebutton : MonoBehaviour

公共相机cam;

void Update()
{

    cam.transform.Rotate(Vector3.up, 20.0f * Time.deltaTime);
}

}


1
错误的原因是您缺少new初始化程序。
rotateX = Random.Range (0, 50);
Camera.main.transform.eulerAngles = new Vector3(0,0,rotateX); //<--- put 'new' before 'Vector3'

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