【问题标题】:How do I smoothly rotate the camera in unity?如何统一平滑地旋转相机?
【发布时间】:2014-11-09 13:46:46
【问题描述】:

我正在用 C# 制作一个 2d unity 游戏。现在,我正在尝试让相机旋转,我正在使用以下代码:

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

但每次我尝试运行游戏时,都会出现错误。 有人对我如何(平滑地)左右旋转相机有提示吗?

【问题讨论】:

    标签: c# unity3d unity3d-editor


    【解决方案1】:

    您可以通过将代码更改为以下内容来消除错误:

    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?
    • 多年来我没有编写任何 C# 代码,但我很确定垃圾收集器会在旧变量替换为新变量后负责删除它们。我知道“新”对于任何有 C++ 背景的人来说都不好。
    • 是的,C# 有一个垃圾收集器,它会负责删除未使用的对象。
    【解决方案2】:

    不要使用 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

    【讨论】:

      【解决方案3】:

      错误是因为您缺少 new 初始化程序。

      rotateX = Random.Range (0, 50);
      Camera.main.transform.eulerAngles = new Vector3(0,0,rotateX); //<--- put 'new' before 'Vector3'
      

      【讨论】:

        【解决方案4】:

        最简单的方法是将该代码放入您的游戏对象中,添加您希望它旋转的当前相机。

        public class swipebutton : MonoBehaviour
        

        { 公共摄像头;

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

        }

        【讨论】:

          猜你喜欢
          • 2015-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-12
          • 1970-01-01
          • 2015-12-19
          • 1970-01-01
          相关资源
          最近更新 更多