Unity开发中总结的一些小技巧

来源:互联网 发布:linux 查看进程cpu 编辑:程序博客网 时间:2024/05/16 18:22

搞Unity3D手机游戏开发快2年了,工作中为了提高效率,攒了一些小技巧,在这里分享一下。

1.改变游戏运行速度

     在调动画,战斗,特效之类的时候特别有用,加速运行或者减速运行使调试更方便。

    void Update()    {        TestCase();        ControlSpeed();       //if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl))//按下Ctrl键才好使,这个看自己的习惯来决定是否需要            if (UnityEditor.EditorWindow.mouseOverWindow && UnityEditor.EditorWindow.mouseOverWindow.titleContent.text.Equals("Game"))//鼠标在Game视图里                ControlZoomIn();    }    void ControlSpeed()    {        if (Input.GetKeyDown(KeyCode.F1))            Time.timeScale = 1f;        else if (Input.GetKeyDown(KeyCode.F2))            Time.timeScale = 2f;        else if (Input.GetKeyDown(KeyCode.F3))            Time.timeScale = 3f;        else if (Input.GetKeyDown(KeyCode.F4))            Time.timeScale = 4f;        else if (Input.GetKeyDown(KeyCode.F5))            Time.timeScale = 0.2f;        else if (Input.GetKeyDown(KeyCode.F6))            Time.timeScale = 0.1f;        else if (Input.GetKeyDown(KeyCode.F7))            Time.timeScale = 0.05f;        else if (Input.GetKeyDown(KeyCode.F10))            Time.timeScale = 0f;        else if (Input.GetKeyDown(KeyCode.F11))            EditorApplication.isPaused = true;    }

        原理很简单,就是运行的时候改变Time.timeScale实现加速和减速,timeScale改变会影响所有跟时间有关系的模块的运行速度。

        我这里是在Update里监视按键,当然你也可以使用其他方式来控制,我觉得按键更方便。

        最后两个比较特别,其中F10是把Time.timeScale设置为0,这时候我们的项目还是在跑的,只是和Unity的Time有关的都会因为Time不变而不变(动画,粒子特效之类的),此时相当于游戏暂停,还可以接受键盘事件,按F1恢复正常。F11 则是调用了编辑器的暂停,和鼠标点击Unity编辑器中的暂停效果一样,此时项目被挂起,Update也不执行了,所以要想恢复,得鼠标去编辑器里再次点击暂停按钮。

        有时候就是想在运行到特定状态的时候暂停在那,用F11比鼠标去点击更精确方便。

也可以通过扩展菜单栏来实现快捷键控制暂停和播放

    /// <summary>    /// F12键控制编辑器暂停和播放    /// </summary>    [MenuItem("Edit/PlayOrPause _F12",false, -100)]    static void PlayOrPause()    {        EditorApplication.isPaused = !EditorApplication.isPaused;    }

 知识点总结:

         这里的Time是UnityEngine中的Time,Time.timeScale可以理解为时间的缩放比例,为0的时候时间(Time.time的值)就静止不变了,0到1之间是减速,为1的时候正常,大于1的时候时间加速,比如Time.timeScale = 2的话,那么Time.time的增长速度也会变成2倍速度。如果你想取到游戏的实际时间,那么使用Time.timeSinceLevelLoad就可以,前提是必须在Awake()方法以后再取,如果在  Awake()方法里面取Time.realtimeSinceStartup会取出一个错误的值,在Start方法里面取的话就正常了

     timeScale不会影响Update和LateUpdate的执行速度,只会影响FixedUpdate的速度,为0的时候FixedUpdate不再执行。

     EditorApplication.isPaused = true;这个是Unity编辑器暂停,项目中的代码都会被暂停执行

2.鼠标滚轮调节摄像机视角大小

    滚轮快速调节视角大小,直观上就像是把看到的画面拉近拉远了一样,在调一些技能效果的时候尤其有用。

    void ControlZoomIn()    {        float minFov = 15f;        float maxFov = 90f;        float sensitivity = 10f;        if (Camera.main)        {            float fov = Camera.main.fieldOfView;            fov -= Input.GetAxis("Mouse ScrollWheel") * sensitivity;            fov = Mathf.Clamp(fov, minFov, maxFov);            Camera.main.fieldOfView = fov;        }    }


0 0
原创粉丝点击