You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 06:33:29