搞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;
}
知识点总结:
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;
}
}