Unity中能否通过代码按键触发3D场景切换为2D效果
完全可以实现,首先要区分两种使用场景,对应实现逻辑有区别:
- 如果你需要在编辑器开发阶段触发切换,实现和手动点击Scene视图顶栏2D按钮100%一致的效果,直接调用Unity编辑器内置API即可,不需要自己实现视角控制逻辑。
- 如果你需要在游戏发布后的运行版本给玩家提供同款2D画面切换效果,无法调用编辑器专属API,手动调整主相机参数即可还原完全一致的视觉表现。
编辑器环境下的一键切换实现
将以下脚本放到项目内的Editor专用文件夹下(不要放到普通运行时目录,否则打包会触发编译错误),默认绑定快捷键为Ctrl+T(Windows)/Cmd+T(Mac),也可以自行修改为绑定游戏UI按钮触发:
using UnityEditor; using UnityEngine; public static class SceneView2DToggle { [MenuItem("Tools/Toggle Scene 2D Mode #t")] public static void Toggle2DMode() { SceneView activeView = SceneView.lastActiveSceneView; if (activeView == null) return; // 直接调用内置的2D模式开关,和手动点击编辑器2D按钮走完全相同的逻辑 activeView.in2DMode = !activeView.in2DMode; } }
如果需要在编辑器运行模式下通过游戏内UI按钮触发,只需要把activeView.in2DMode = !activeView.in2DMode逻辑抽为公开静态方法,给按钮绑定事件即可,注意所有调用编辑器API的代码必须用#if UNITY_EDITOR宏包裹,避免打包报错。
发布版运行时的2D效果实现
编辑器2D按钮的本质是将场景相机切换为正交投影、固定Z轴正朝向、对齐正交视野尺寸,你只需要在运行时控制主相机参数切换,就能得到完全一致的视觉效果。将以下脚本挂到主相机上即可,默认绑定T键触发,也支持绑定UI按钮事件:
using UnityEngine; public class Runtime2DEffectToggle : MonoBehaviour { public KeyCode triggerKey = KeyCode.T; public float orthographicSize = 5f; public float camera2DPosZ = -10f; private Camera _mainCam; private Vector3 _cam3DPos; private Quaternion _cam3DRot; private float _cam3DFov; private bool _isIn2DMode; void Start() { _mainCam = Camera.main; // 缓存初始3D模式下的相机参数,切回3D时还原 _cam3DPos = _mainCam.transform.position; _cam3DRot = _mainCam.transform.rotation; _cam3DFov = _mainCam.fieldOfView; } void Update() { if (Input.GetKeyDown(triggerKey)) { Toggle2DView(); } } public void Toggle2DView() { _isIn2DMode = !_isIn2DMode; if (_isIn2DMode) { _mainCam.orthographic = true; _mainCam.orthographicSize = orthographicSize; _mainCam.transform.rotation = Quaternion.identity; _mainCam.transform.position = new Vector3( _mainCam.transform.position.x, _mainCam.transform.position.y, camera2DPosZ ); } else { _mainCam.orthographic = false; _mainCam.fieldOfView = _cam3DFov; _mainCam.transform.position = _cam3DPos; _mainCam.transform.rotation = _cam3DRot; } } }
注意:运行时脚本不要引用
UnityEditor命名空间,否则打包会失败。2D模式下的正交尺寸、相机Z轴位置可以根据自己项目的场景大小自行调整,和编辑器Scene视图参数对齐即可得到完全一致的显示效果。
内容的提问来源于stack exchange,提问作者Zehra Uzun
相关产品推荐
相关产品推荐

